initial commit in accordance with CQ 3784
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.classpath
new file mode 100644
index 0000000..4848249
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.cvsignore b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.cvsignore
new file mode 100644
index 0000000..092357e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.cvsignore
@@ -0,0 +1 @@
+bin

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.project
new file mode 100644
index 0000000..f658ae3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.objectteams.otdt.ui.tests.refactoring</name>
+	<comment></comment>
+	<projects>
+	</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.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..96a7953
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: OT Refactoring Test Plug-in

+Bundle-SymbolicName: org.eclipse.objectteams.otdt.ui.tests.refactoring;singleton:=true

+Bundle-Version: 1.3.0

+Bundle-ClassPath: otrefactoringtests.jar

+Bundle-Activator: org.eclipse.objectteams.otdt.ui.tests.refactoring.OTRefactoringTestPlugin

+Bundle-Vendor: The TOPPrax consortium

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.core.resources,

+ org.eclipse.jdt.core,

+ org.eclipse.jdt.ui,

+ org.eclipse.ui,

+ org.eclipse.ui.ide,

+ org.eclipse.jface.text,

+ org.eclipse.ltk.core.refactoring,

+ org.junit,

+ org.eclipse.jdt.core.tests.compiler,

+ org.eclipse.jdt.ui.tests.refactoring,

+ org.eclipse.objectteams.otdt.ui.tests,

+ org.eclipse.objectteams.otdt.tests,

+ org.eclipse.test.performance,

+ org.eclipse.objectteams.otdt.refactoring,

+ org.eclipse.jdt.core.manipulation,

+ org.eclipse.jdt.ui.tests

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.objectteams.otdt.ui.tests.refactoring,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.move,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.rename,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.requiredfeatures,

+ org.eclipse.objectteams.otdt.ui.tests.refactoring.util

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/build.properties b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/build.properties
new file mode 100644
index 0000000..ba5e580
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/build.properties
@@ -0,0 +1,13 @@
+source.otrefactoringtests.jar = src/

+output.otrefactoringtests.jar = bin/

+bin.includes = plugin.xml,\

+               otrefactoringtests.jar,\

+               testdata/,\

+               testresources/,\

+               test.xml,\

+               META-INF/,\

+               workspace/,\

+               JCL/

+src.includes = build.properties,\

+               .project,\

+               .classpath

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/plugin.xml
new file mode 100644
index 0000000..66586ff
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/plugin.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+<plugin>

+</plugin>

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/AllTests.java
new file mode 100644
index 0000000..7506208
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/AllTests.java
@@ -0,0 +1,78 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All Refactoring Tests");

+

+        // OTDT refactoring tests

+        // rename

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameMethodInInterfaceTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenamePrivateMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameStaticMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameVirtualMethodInClassTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenamePrivateFieldTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameTypeTests.suite());

+        

+        // move

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.move.MoveInstanceMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.move.MoveStaticMethodTests.suite());

+        

+        //extract

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractMethodRefactoringUtilTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractTempTests.suite());

+

+        //copy & paste, delete (cut)

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTCopyToClipboardTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTDeleteTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTPasteActionTest.suite());

+        

+        // pull & push

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.pullup.PullUpTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.pushdown.PushDownTests.suite());

+        

+        // ot refactorings

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.inlinecallin.InlineCallinTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractcallin.ExtractCallinTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/FileBasedRefactoringTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/FileBasedRefactoringTest.java
new file mode 100644
index 0000000..e17c59b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/FileBasedRefactoringTest.java
@@ -0,0 +1,37 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring;

+

+import org.eclipse.objectteams.otdt.tests.FileBasedTest;

+

+/**

+ * @author svacina

+ */

+public class FileBasedRefactoringTest extends FileBasedTest {

+

+    public FileBasedRefactoringTest(String name) {

+        super(name);

+    }

+

+    protected String getPluginID() {

+        return "org.eclipse.objectteams.otdt.ui.tests.refactoring";

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/MySetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/MySetup.java
new file mode 100644
index 0000000..a7af276
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/MySetup.java
@@ -0,0 +1,122 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/

+package org.eclipse.objectteams.otdt.ui.tests.refactoring;

+

+import java.util.Hashtable;

+

+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.core.JavaCore;

+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;

+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;

+import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;

+import org.eclipse.jdt.internal.ui.JavaPlugin;

+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;

+import org.eclipse.objectteams.otdt.ui.tests.util.TestOptions;

+

+public class MySetup extends TestSetup

+{

+    private static IPackageFragmentRoot _root;

+    private static IPackageFragment _packageP;

+    private static IJavaProject _javaTestProject;

+    

+    public static final String CONTAINER = "src";

+

+    

+    public MySetup(Test test)

+    {

+        super(test);

+    }

+

+    public static IPackageFragmentRoot getDefaultSourceFolder() throws Exception

+    {

+        if (_root != null)

+        {

+            return _root;

+        }

+        throw new Exception("MySetup not initialized");

+    }

+

+    public static IJavaProject getProject() throws Exception

+    {

+        if (_javaTestProject != null)

+        {

+            return _javaTestProject;

+        }

+        throw new Exception("MySetup not initialized");

+    }

+

+    public static IPackageFragment getPackageP() throws Exception

+    {

+        if (_packageP != null)

+        {

+            return _packageP;

+        }

+        throw new Exception("MySetup not initialized");

+    }

+

+    protected void setUp() throws Exception

+    {

+        super.setUp();

+        JavaProjectHelper.setAutoBuilding(false);

+        if (JavaPlugin.getActivePage() != null)

+        {

+            JavaPlugin.getActivePage().close();

+        }

+        _javaTestProject = JavaProjectHelper.createOTJavaProject("TestProject"

+                + System.currentTimeMillis(), "bin");

+        JavaProjectHelper.addRTJar(_javaTestProject);

+        _root = JavaProjectHelper.addSourceContainer(_javaTestProject,

+                CONTAINER);

+        _packageP = _root.createPackageFragment("p", true, null);

+

+        Hashtable options = TestOptions.getFormatterOptions();

+        options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.TAB);

+        options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "0");

+        options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");

+        JavaCore.setOptions(options);

+        TestOptions.initializeCodeGenerationOptions();

+        JavaPlugin.getDefault().getCodeTemplateStore().load();

+

+        StringBuffer comment = new StringBuffer();

+        comment.append("/**\n");

+        comment.append(" * ${tags}\n");

+        comment.append(" */");

+        StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID, comment.toString(), null);

+    }

+

+    protected void tearDown() throws Exception

+    {

+        if (_packageP.exists())

+        {

+            _packageP.delete(true, null);

+        }

+        JavaProjectHelper.removeSourceContainer(_javaTestProject, CONTAINER);

+        JavaProjectHelper.delete(_javaTestProject);

+        super.tearDown();

+    }

+

+}

+

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestPlugin.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestPlugin.java
new file mode 100644
index 0000000..ba5484a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestPlugin.java
@@ -0,0 +1,83 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring;

+

+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.ResourcesPlugin;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.Path;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.core.runtime.Plugin;

+

+/**

+ * The main plugin class to be used in the desktop.

+ */

+public class OTRefactoringTestPlugin extends Plugin

+{

+    //The shared instance.

+    private static OTRefactoringTestPlugin plugin;

+

+    public OTRefactoringTestPlugin()

+    {

+        super();

+        plugin = this;

+    }

+

+    /**

+     * Returns the shared instance.

+     */

+    public static OTRefactoringTestPlugin getDefault()

+    {

+        return plugin;

+    }

+

+    public static IWorkspace getWorkspace()

+    {

+        return ResourcesPlugin.getWorkspace();

+    }

+

+    public File getFileInPlugin(IPath path)

+    {

+        try

+        {

+            URL installURL = new URL(getDefault().getBundle().getEntry("/"), path.toString());

+            URL localURL = Platform.asLocalURL(installURL);

+            return new File(localURL.getFile());

+        }

+        catch (IOException ex)

+        {

+            return null;

+        }

+    }

+

+    public InputStream getTestResourceStream(String fileName)

+            throws IOException

+    {

+        IPath path = new Path("testdata").append(fileName);

+        URL url = new URL(getDefault().getBundle().getEntry("/"), path.toString());

+        return url.openStream();

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestSetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestSetup.java
new file mode 100644
index 0000000..98436ac
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/OTRefactoringTestSetup.java
@@ -0,0 +1,42 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup;
+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;
+
+@SuppressWarnings("restriction")
+public class OTRefactoringTestSetup extends RefactoringTestSetup {
+
+	public OTRefactoringTestSetup(Test test) {
+		super(test);
+	}
+
+//{ObjectTeams: changed project creation:
+	protected IJavaProject createJavaProject(String string, String string2) throws CoreException {
+		return JavaProjectHelper.createOTJavaProject("TestProject"+System.currentTimeMillis(), "bin");
+// SH}
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/RefactoringTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/RefactoringTest.java
new file mode 100644
index 0000000..1e169f3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/RefactoringTest.java
@@ -0,0 +1,667 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/

+package org.eclipse.objectteams.otdt.ui.tests.refactoring;

+

+import java.io.BufferedReader;

+import java.io.IOException;

+import java.io.InputStream;

+import java.io.InputStreamReader;

+import java.io.StringBufferInputStream;

+import java.util.ArrayList;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Set;

+

+import junit.framework.TestCase;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+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.IJavaProject;

+import org.eclipse.jdt.core.IMember;

+import org.eclipse.jdt.core.IMethod;

+import org.eclipse.jdt.core.IPackageFragment;

+import org.eclipse.jdt.core.IPackageFragmentRoot;

+import org.eclipse.jdt.core.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.core.search.SearchPattern;

+import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;

+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;

+import org.eclipse.jdt.internal.corext.util.Strings;

+import org.eclipse.ltk.core.refactoring.Change;

+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;

+import org.eclipse.ltk.core.refactoring.CreateChangeOperation;

+import org.eclipse.ltk.core.refactoring.IUndoManager;

+import org.eclipse.ltk.core.refactoring.PerformChangeOperation;

+import org.eclipse.ltk.core.refactoring.Refactoring;

+import org.eclipse.ltk.core.refactoring.RefactoringCore;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+

+public abstract class RefactoringTest extends TestCase

+{

+    private IPackageFragmentRoot _root;

+    private IPackageFragment _packageP;

+

+    public boolean _isVerbose = 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

+    {

+        _root = MySetup.getDefaultSourceFolder();

+        _packageP = MySetup.getPackageP();

+

+        if (_isVerbose)

+        {

+            System.out

+                    .println("\n---------------------------------------------");

+            System.out.println("\nTest:" + getClass() + "." + getName());

+        }

+        RefactoringCore.getUndoManager().flush();

+    }

+

+    protected void tearDown() throws Exception

+    {

+        refreshFromLocal();

+        performDummySearch();

+

+        if (getPackageP().exists())

+        {

+            tryDeletingAllJavaChildren(getPackageP());

+            tryDeletingAllNonJavaChildResources(getPackageP());

+        }

+

+        if (getRoot().exists())

+        {

+            IJavaElement[] packages = getRoot().getChildren();

+            for (int i = 0; i < packages.length; i++)

+            {

+                try

+                {

+                    IPackageFragment pack = (IPackageFragment)packages[i];

+                    if (!pack.equals(getPackageP()) && pack.exists()

+                            && !pack.isReadOnly())

+                        pack.delete(true, null);

+                }

+                catch (JavaModelException ex)

+                {

+                    //try to delete'em all

+                    ex.printStackTrace();

+                }

+            }

+        }

+    }

+

+    private void refreshFromLocal() throws CoreException

+    {

+        if (getRoot().exists())

+        {

+            getRoot().getResource().

+            		  refreshLocal(IResource.DEPTH_INFINITE, null);

+        }

+        else if (getPackageP().exists())//don't refresh package if root already refreshed

+        {

+            getPackageP().getResource().

+            			  refreshLocal(IResource.DEPTH_INFINITE, null);

+        }

+    }

+

+    private static void tryDeletingAllNonJavaChildResources(

+            IPackageFragment pack) throws JavaModelException

+    {

+        Object[] nonJavaKids = pack.getNonJavaResources();

+        for (int i = 0; i < nonJavaKids.length; i++)

+        {

+            if (nonJavaKids[i] instanceof IResource)

+            {

+                IResource resource = (IResource)nonJavaKids[i];

+                try

+                {

+                    resource.delete(true, null);

+                }

+                catch (CoreException ex)

+                {

+                    //try to delete'em all

+                    ex.printStackTrace();

+                }

+            }

+        }

+    }

+

+    private static void tryDeletingAllJavaChildren(IPackageFragment pack)

+            throws JavaModelException

+    {

+        IJavaElement[] kids = pack.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 ex)

+                {

+                    //try to delete'em all

+                    ex.printStackTrace();

+                }

+            }

+        }

+    }

+

+    protected IPackageFragmentRoot getRoot()

+    {

+        return _root;

+    }

+

+    protected IPackageFragment getPackageP()

+    {

+        return _packageP;

+    }

+

+    protected final RefactoringStatus performRefactoring(Refactoring ref)

+            throws Exception

+    {

+        return performRefactoring(ref, true);

+    }

+

+    protected final RefactoringStatus performRefactoring(Refactoring ref,

+            boolean providesUndo) throws Exception

+    {

+        performDummySearch();

+        IUndoManager undoManager = getUndoManager();

+        CreateChangeOperation create = new CreateChangeOperation(

+                new CheckConditionsOperation(ref,

+                        CheckConditionsOperation.ALL_CONDITIONS),

+                RefactoringStatus.FATAL);

+        PerformChangeOperation perform = new PerformChangeOperation(create);

+        perform.setUndoManager(undoManager, ref.getName());

+        ResourcesPlugin.getWorkspace().run(perform, new NullProgressMonitor());

+        RefactoringStatus status = create.getConditionCheckingStatus();

+        if (!status.isOK())

+        {

+            return status;

+        }

+        assertTrue("Change wasn't executed", perform.changeExecuted());

+        Change undo = perform.getUndoChange();

+        if (providesUndo)

+        {

+            assertNotNull("Undo doesn't exist", undo);

+            assertTrue("Undo manager is empty", undoManager.anythingToUndo());

+        }

+        else

+        {

+            assertNull("Undo manager contains undo but shouldn't", undo);

+        }

+        return null;

+    }

+

+    protected final RefactoringStatus performRefactoringWithStatus(

+            Refactoring ref) throws Exception

+    {

+        performDummySearch();

+        CreateChangeOperation create = new CreateChangeOperation(

+                new CheckConditionsOperation(ref,

+                        CheckConditionsOperation.ALL_CONDITIONS),

+                RefactoringStatus.FATAL);

+        PerformChangeOperation perform = new PerformChangeOperation(create);

+        perform.setUndoManager(RefactoringCore.getUndoManager(), ref.getName());

+        ResourcesPlugin.getWorkspace().run(perform, new NullProgressMonitor());

+        RefactoringStatus status = create.getConditionCheckingStatus();

+        if (status.hasFatalError())

+        {

+            return status;

+        }

+        assertTrue("Change wasn't executed", perform.changeExecuted());

+        return status;

+    }

+

+    protected void performDummySearch() throws Exception

+    {

+        performDummySearch(getPackageP());

+    }

+

+    protected final Change performChange(final Refactoring refactoring,

+            boolean storeUndo) throws Exception

+    {

+        CreateChangeOperation create = new CreateChangeOperation(refactoring);

+        PerformChangeOperation perform = new PerformChangeOperation(create);

+        if (storeUndo)

+        {

+            perform.setUndoManager(getUndoManager(), refactoring.getName());

+        }

+        ResourcesPlugin.getWorkspace().run(perform, new NullProgressMonitor());

+        assertTrue("Change wasn't executed", perform.changeExecuted());

+        return perform.getUndoChange();

+    }

+

+    protected final Change performChange(final Change change) throws Exception

+    {

+        PerformChangeOperation perform = new PerformChangeOperation(change);

+        ResourcesPlugin.getWorkspace().run(perform, new NullProgressMonitor());

+        assertTrue("Change wasn't executed", perform.changeExecuted());

+        return perform.getUndoChange();

+    }

+

+    protected IUndoManager getUndoManager()

+    {

+        IUndoManager undoManager = RefactoringCore.getUndoManager();

+        undoManager.flush();

+        return undoManager;

+    }

+

+    /** ************** helpers ***************** */

+    /** ** mostly not general, just shortcuts **** */

+

+    protected IType getType(ICompilationUnit cu, String name)

+            throws JavaModelException

+    {

+        IType[] types = cu.getAllTypes();

+        for (int i = 0; i < types.length; i++)

+        {

+            if (types[i].getFullyQualifiedName().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 + ")");

+    }

+

+    //-----------------------

+    public static InputStream getStream(String content)

+    {

+        return new StringBufferInputStream(content);

+    }

+

+    public static IPackageFragmentRoot getSourceFolder(

+            IJavaProject javaProject, String name) throws JavaModelException

+    {

+        IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots();

+        for (int i = 0; i < roots.length; i++)

+        {

+            if (!roots[i].isArchive() && roots[i].getElementName().equals(name))

+                return roots[i];

+        }

+        return null;

+    }

+

+    public static String getFileContents(String fileName) throws IOException

+    {

+        return getContents(getFileInputStream(fileName));

+    }

+

+    public static String getContents(IFile file) throws IOException,

+            CoreException

+    {

+        return getContents(file.getContents());

+    }

+

+    public static 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);

+        return cu;

+    }

+

+    public static String getContents(InputStream in) throws IOException

+    {

+        BufferedReader br = new BufferedReader(new InputStreamReader(in));

+        StringBuffer sb = new StringBuffer(300);

+        try

+        {

+            int read = 0;

+            while ((read = br.read()) != -1)

+            {

+                sb.append((char)read);

+            }

+        }

+        finally

+        {

+            br.close();

+        }

+        return sb.toString();

+    }

+

+    public static InputStream getFileInputStream(String fileName)

+            throws IOException

+    {

+        return OTRefactoringTestPlugin.getDefault().getTestResourceStream(

+                fileName);

+    }

+

+    public static String removeExtension(String fileName)

+    {

+        return fileName.substring(0, fileName.lastIndexOf('.'));

+    }

+

+    public static void performDummySearch(IJavaElement element)

+            throws Exception

+    {

+        new SearchEngine().searchAllTypeNames(ResourcesPlugin.getWorkspace(),

+                null, null, SearchPattern.R_EXACT_MATCH, true,

+                IJavaSearchConstants.CLASS, SearchEngine

+                        .createJavaSearchScope(new IJavaElement[] { element }),

+                new Requestor(),

+                IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null);

+    }

+

+    public static IMember[] merge(IMember[] a1, IMember[] a2, IMember[] a3)

+    {

+        return JavaElementUtil.merge(JavaElementUtil.merge(a1, a2), a3);

+    }

+

+    public static IMember[] merge(IMember[] a1, IMember[] a2)

+    {

+        return JavaElementUtil.merge(a1, a2);

+    }

+

+    public static IField[] getFields(IType type, String[] names)

+            throws JavaModelException

+    {

+        if (names == null)

+        {

+            return new IField[0];

+        }

+        Set fields = new HashSet();

+        for (int i = 0; i < names.length; i++)

+        {

+            IField field = type.getField(names[i]);

+            assertTrue("field " + field.getElementName() + " does not exist",

+                    field.exists());

+            fields.add(field);

+        }

+        return (IField[])fields.toArray(new IField[fields.size()]);

+    }

+

+    public static IType[] getMemberTypes(IType type, String[] names)

+            throws JavaModelException

+    {

+        if (names == null)

+        {

+            return new IType[0];

+        }

+        Set memberTypes = new HashSet();

+        for (int i = 0; i < names.length; i++)

+        {

+            IType memberType = type.getType(names[i]);

+            assertTrue("member type " + memberType.getElementName()

+                    + " does not exist", memberType.exists());

+            memberTypes.add(memberType);

+        }

+        return (IType[])memberTypes.toArray(new IType[memberTypes.size()]);

+    }

+

+    public static IMethod[] getMethods(IType type, String[] names,

+            String[][] signatures) throws JavaModelException

+    {

+        if (names == null || signatures == null)

+        {

+            return new IMethod[0];

+        }

+        List methods = new ArrayList(names.length);

+        for (int i = 0; i < names.length; i++)

+        {

+            IMethod method = type.getMethod(names[i], signatures[i]);

+            assertTrue("method " + method.getElementName() + " does not exist",

+                    method.exists());

+            if (!methods.contains(method))

+            {

+                methods.add(method);

+            }

+        }

+        return (IMethod[])methods.toArray(new IMethod[methods.size()]);

+    }

+

+    public static IType[] findTypes(IType[] types, String[] namesOfTypesToPullUp)

+    {

+        List found = new ArrayList(types.length);

+        for (int i = 0; i < types.length; i++)

+        {

+            IType type = types[i];

+            for (int j = 0; j < namesOfTypesToPullUp.length; j++)

+            {

+                String name = namesOfTypesToPullUp[j];

+                if (type.getElementName().equals(name))

+                {

+                    found.add(type);

+                }

+            }

+        }

+        return (IType[])found.toArray(new IType[found.size()]);

+    }

+

+    public static IField[] findFields(IField[] fields,

+            String[] namesOfFieldsToPullUp)

+    {

+        List found = new ArrayList(fields.length);

+        for (int i = 0; i < fields.length; i++)

+        {

+            IField field = fields[i];

+            for (int j = 0; j < namesOfFieldsToPullUp.length; j++)

+            {

+                String name = namesOfFieldsToPullUp[j];

+                if (field.getElementName().equals(name))

+                {

+                    found.add(field);

+                }

+            }

+        }

+        return (IField[])found.toArray(new IField[found.size()]);

+    }

+

+    public static IMethod[] findMethods(IMethod[] selectedMethods,

+            String[] namesOfMethods, String[][] signaturesOfMethods)

+    {

+        List found = new ArrayList(selectedMethods.length);

+        for (int i = 0; i < selectedMethods.length; i++)

+        {

+            IMethod method = selectedMethods[i];

+            String[] paramTypes = method.getParameterTypes();

+            for (int j = 0; j < namesOfMethods.length; j++)

+            {

+                String methodName = namesOfMethods[j];

+                if (!methodName.equals(method.getElementName()))

+                {

+                    continue;

+                }

+                String[] methodSig = signaturesOfMethods[j];

+                if (!areSameSignatures(paramTypes, methodSig))

+                {

+                    continue;

+                }

+                found.add(method);

+            }

+        }

+        return (IMethod[])found.toArray(new IMethod[found.size()]);

+    }

+

+    private static boolean areSameSignatures(String[] s1, String[] s2)

+    {

+        if (s1.length != s2.length)

+        {

+            return false;

+        }

+        for (int i = 0; i < s1.length; i++)

+        {

+            if (!s1[i].equals(s2[i]))

+            {

+                return false;

+            }

+        }

+        return true;

+    }

+

+    /**

+     * Line-based version of junit.framework.Assert.assertEquals(String, String)

+     * without considering line delimiters.

+     */

+    public static void assertEqualLines(String expected, String actual)

+    {

+        assertEqualLines("", expected, actual);

+    }

+

+    /**

+     * Line-based version of junit.framework.Assert.assertEquals(String, String, String)

+     * without considering line delimiters.

+     */

+    public static void assertEqualLines(String message, String expected,

+            String actual)

+    {

+        String[] expectedLines = Strings.convertIntoLines(expected);

+        String[] actualLines = Strings.convertIntoLines(actual);

+

+        String expected2 = (expectedLines == null ? null : Strings.concatenate(

+                expectedLines, "\n"));

+        String actual2 = (actualLines == null ? null : Strings.concatenate(

+                actualLines, "\n"));

+        assertEquals(message, expected2, actual2);

+    }

+

+    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/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/AllTests.java
new file mode 100644
index 0000000..182a5d0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/AllTests.java
@@ -0,0 +1,44 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractcallin;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-ExtractCallin-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractcallin.ExtractCallinTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/ExtractCallinTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/ExtractCallinTests.java
new file mode 100644
index 0000000..084eeb7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractcallin/ExtractCallinTests.java
@@ -0,0 +1,140 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractcallin;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.objectteams.otdt.internal.core.CallinMapping;
+import org.eclipse.objectteams.otdt.internal.refactoring.otrefactorings.extractcallin.ExtractCallinRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * @author Johannes Gebauer
+ * 
+ */
+@SuppressWarnings("restriction")
+public class ExtractCallinTests extends RefactoringTest {
+	private static final String REFACTORING_PATH = "ExtractCallin/";
+
+	public ExtractCallinTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new MySetup(new TestSuite(ExtractCallinTests.class));
+	}
+
+	public static Test setUpTest(Test test) {
+		return new MySetup(test);
+	}
+
+	protected String getRefactoringPath() {
+		return REFACTORING_PATH;
+	}
+
+	private ICompilationUnit[] createCUs(String[] cuNames) throws Exception {
+		ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+		for (int idx = 0; idx < cuNames.length; idx++) {
+			Assert.isNotNull(cuNames[idx]);
+			cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+		}
+		return cus;
+	}
+
+	private ExtractCallinRefactoring createExtractCallinRefactoring(IMethod baseMethod, IType role, int mappingKind) {
+		ExtractCallinRefactoring refactoring = new ExtractCallinRefactoring(baseMethod, role, mappingKind);
+		return refactoring;
+	}
+
+	private void performPullUp_pass(String[] cuNames, String baseMethodName, String[] baseMethodSignature, int mappingKind, boolean deleteRoleMethod,
+			String baseName, String roleName, boolean copyBaseMethod) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType baseType = getType(cus[0], baseName);
+			IType roleType = getType(cus[1], roleName);
+
+			IMethod baseMethod = baseType.getMethod(baseMethodName, baseMethodSignature);
+			assertTrue("base method " + baseMethod.getElementName() + " does not exist", baseMethod.exists());
+
+			ExtractCallinRefactoring ref = createExtractCallinRefactoring(baseMethod, roleType, mappingKind);
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+
+			ref.setDeleteBaseMethod(deleteRoleMethod);
+	
+			ref.setCopyBaseMethod(copyBaseMethod);
+			
+			RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor());
+			assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+			performChange(ref, false);
+
+			for (int i = 0; i < cus.length; i++) {
+				String expected = getFileContents(getOutputTestFileName(cuNames[i]));
+				String actual = cus[i].getSource();
+				assertEqualLines(expected, actual);
+			}
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+
+	/******* tests ******************/
+
+	/* Extract Callin Tests */
+	
+	public void testExtractSimpleBeforeCallin() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[0], CallinMapping.KIND_BEFORE, false, "B", "R", false);
+	}
+	
+	public void testExtractSimpleReplaceCallin1() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[0], CallinMapping.KIND_REPLACE, false, "B", "R", true);
+	}
+	
+	public void testExtractSimpleAfterCallin() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[0], CallinMapping.KIND_AFTER, false, "B", "R", false);
+	}
+	
+	public void testExtractSimpleReplaceCallin2() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[0], CallinMapping.KIND_REPLACE, false, "B", "R", false);
+	}
+	
+	public void testExtractCallinWithParameter() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[] { "I" }, CallinMapping.KIND_BEFORE, false, "B", "R", false);
+	}
+	
+	public void testExtractCallinWithParameterMapping() throws Exception {
+		performPullUp_pass(new String[] { "B", "T" }, "m", new String[] { "I", "I" }, CallinMapping.KIND_BEFORE, false, "B", "R", false);
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AbstractSelectionTestCase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AbstractSelectionTestCase.java
new file mode 100644
index 0000000..91aaa55
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AbstractSelectionTestCase.java
@@ -0,0 +1,200 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;

+

+/**

+ * @author brcan

+ *

+ */

+import java.io.IOException;

+import java.io.InputStream;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IPackageFragment;

+import org.eclipse.jdt.core.JavaCore;

+import org.eclipse.jdt.ui.tests.refactoring.infra.AbstractCUTestCase;

+import org.eclipse.jface.text.ITextSelection;

+import org.eclipse.jface.text.TextSelection;

+import org.eclipse.ltk.core.refactoring.Change;

+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;

+import org.eclipse.ltk.core.refactoring.IUndoManager;

+import org.eclipse.ltk.core.refactoring.PerformRefactoringOperation;

+import org.eclipse.ltk.core.refactoring.Refactoring;

+import org.eclipse.ltk.core.refactoring.RefactoringCore;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.OTRefactoringTestPlugin;

+

+@SuppressWarnings({ "nls", "restriction" })

+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 OTRefactoringTestPlugin.getDefault().getTestResourceStream(fileName);

+	}

+	

+//{ObjectTeams: fixing a JDT-problem: couldn't cope with package paths > 1	

+	protected ICompilationUnit createCU(IPackageFragment pack, String name) throws Exception {

+		name= adaptName(name);

+		return createCU(pack, name, getFileInputStream(myGetFilePath(pack, name)));

+	}

+	

+	protected String myGetFilePath(String path, String name) {

+		return getResourceLocation() + path + "/" + name;

+	}

+	

+	protected String myGetFilePath(IPackageFragment pack, String name) {

+		return myGetFilePath(pack.getElementName().replace('.','/'), name); // <-- the patch: force the package path to use '/'		

+	}

+// SH}

+

+	protected void performTest(

+	        final ICompilationUnit unit,

+	        final Refactoring refactoring,

+	        int mode,

+	        final String out,

+	        boolean doUndo) throws Exception

+    {

+	    IProgressMonitor pm = new NullProgressMonitor();

+		switch (mode)

+		{

+			case VALID_SELECTION:

+				assertTrue(checkPreconditions(refactoring, pm).isOK());

+				break;

+			case INVALID_SELECTION:

+				assertTrue(!checkPreconditions(refactoring, pm).isOK());

+				break;

+			case COMPARE_WITH_OUTPUT:

+				IUndoManager undoManager = RefactoringCore.getUndoManager();

+				undoManager.flush();

+				String original = unit.getSource();

+				

+				PerformRefactoringOperation op = new PerformRefactoringOperation(

+					refactoring, getCheckingStyle());

+				JavaCore.run(op, new NullProgressMonitor());

+				assertTrue("Precondition check failed", !op.getConditionStatus().hasFatalError());

+				assertTrue("Validation check failed", !op.getValidationStatus().hasFatalError());

+				assertNotNull("No Undo", op.getUndoChange());

+				compareSource(unit.getSource(), out);

+				Change undo = op.getUndoChange();

+				assertNotNull("Undo doesn't exist", undo);

+				assertTrue("Undo manager is empty", undoManager.anythingToUndo());

+

+				if (doUndo)

+				{

+					undoManager.performUndo(null, new NullProgressMonitor());

+					assertTrue("Undo manager still has undo", !undoManager.anythingToUndo());

+					assertTrue("Undo manager is empty", undoManager.anythingToRedo());

+					compareSource(original, unit.getSource());

+				}

+				break;		

+		}

+	}

+	

+	protected RefactoringStatus checkPreconditions(

+	        Refactoring refactoring,

+	        IProgressMonitor pm) throws CoreException

+    {

+		CheckConditionsOperation op =

+		    new CheckConditionsOperation(refactoring, getCheckingStyle());

+		op.run(new NullProgressMonitor());

+		return op.getStatus();

+	}

+	

+	protected int getCheckingStyle()

+	{

+		return CheckConditionsOperation.ALL_CONDITIONS;

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AllTests.java
new file mode 100644
index 0000000..44ac71b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/AllTests.java
@@ -0,0 +1,50 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-Extract-Method-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractMethodRefactoringUtilTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod.ExtractTempTests.suite());

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodRefactoringUtilTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodRefactoringUtilTests.java
new file mode 100644
index 0000000..720083b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodRefactoringUtilTests.java
@@ -0,0 +1,388 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;

+

+import java.lang.reflect.Modifier;

+import java.util.ArrayList;

+import java.util.List;

+

+import junit.framework.Test;

+

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IMethod;

+import org.eclipse.jdt.core.IType;

+import org.eclipse.jdt.internal.corext.Corext;

+import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;

+import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.objectteams.otdt.core.IRoleType;

+import org.eclipse.objectteams.otdt.core.TypeHelper;

+import org.eclipse.objectteams.otdt.internal.refactoring.adaptor.extractmethod.ExtractMethodAmbuguityMsgCreator;

+import org.eclipse.objectteams.otdt.internal.refactoring.adaptor.extractmethod.ExtractMethodOverloadingMsgCreator;

+import org.eclipse.objectteams.otdt.internal.refactoring.corext.base.OTRefactoringStatusCodes;

+import org.eclipse.objectteams.otdt.internal.refactoring.util.RefactoringUtil;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.FileBasedRefactoringTest;

+

+/**

+ * @author brcan

+ * 

+ */

+@SuppressWarnings( { "restriction", "nls" })

+public class ExtractMethodRefactoringUtilTests extends FileBasedRefactoringTest {

+	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();

+

+	// Regular classes

+	private IType _a;

+	private IType _b;

+	private IType _c;

+	private IType _q;

+	private IType _s;

+

+	// Team class

+	private IType _t1;

+

+	// Role classes

+	private IRoleType _t2r1;

+	private IRoleType _t3r1;

+	private IRoleType _t3r2;

+

+	private ExtractMethodRefactoring _refactoring;

+

+	public ExtractMethodRefactoringUtilTests(String name) {

+		super(name);

+	}

+

+	public static Test suite() {

+		return new Suite(ExtractMethodRefactoringUtilTests.class);

+	}

+

+	public void setUpSuite() throws Exception {

+		setTestProjectDir("ExtractMethodRefactoringUtil");

+		super.setUpSuite();

+

+		_a = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "A");

+

+		_b = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "B");

+

+		_c = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "C");

+

+		_q = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "Q");

+

+		_s = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "S");

+

+		_t1 = getType(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "T1");

+

+		_t2r1 = getRole(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "T2", "R1");

+

+		_t3r1 = getRole(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "T3", "R1");

+

+		_t3r2 = getRole(getTestProjectDir(), "src", "roleAndBaseHierarchy1", "T3", "R2");

+	}

+

+	protected void setUp() throws Exception {

+		super.setUp();

+	}

+

+	private 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;

+	}

+

+	@SuppressWarnings("unchecked")

+	// raw List from ExtractMethodRefactoring.

+	private String[] fetchNewParameterTypes() {

+		List parameterInfos = _refactoring.getParameterInfos();

+		String[] parameterTypes = new String[parameterInfos.size()];

+		for (int i = 0; i < parameterTypes.length; i++)

+			parameterTypes[i] = ((ParameterInfo) parameterInfos.get(i)).getNewTypeName();

+		return parameterTypes;

+	}

+

+	/********** tests **********/

+	// =====================================================================================

+	// Testing overloading

+	// =====================================================================================

+	public void testCheckOverloading1() throws Exception {

+		// focus type -> A

+		ICompilationUnit cu = _a.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("f");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_a, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading2() throws Exception {

+		// focus type -> B

+		ICompilationUnit cu = _b.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("g");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_b, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading3() throws Exception {

+		// focus type -> C

+		ICompilationUnit cu = _c.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("g");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_c, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading4() throws Exception {

+		// focus type -> Q

+		ICompilationUnit cu = _q.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("m");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_q, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading5() throws Exception {

+		// focus type -> S

+		ICompilationUnit cu = _s.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("m");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_s, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading6() throws Exception {

+		// focus type -> T1

+		ICompilationUnit cu = _t1.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("m");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_t1, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading7() throws Exception {

+		// focus type -> T2.R1

+		ICompilationUnit cu = _t2r1.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("m");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_t2r1, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	public void testCheckOverloading8() throws Exception {

+		// focus type -> T3.R2

+		ICompilationUnit cu = _t3r2.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("rm");

+		_refactoring.setVisibility(Modifier.PROTECTED);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_t3r2, true, true, true, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	// checking overloading including hidden (private) methods, because method

+	// bindings can refer to otherwise hidden base methods (decapsulation)

+	/* test overloading of private base method */

+	public void testCheckOverloading9() throws Exception {

+		// focus type -> C

+		ICompilationUnit cu = _c.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("n");

+		_refactoring.setVisibility(Modifier.PRIVATE);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_c, true, true, false, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	/* test overloading of private role method */

+	public void testCheckOverloading10() throws Exception {

+		// focus type -> T3.R2

+		ICompilationUnit cu = _t3r2.getCompilationUnit();

+		int[] selection = getSelection(cu.getSource());

+		_refactoring = new ExtractMethodRefactoring(cu, selection[0], selection[1]);

+		_refactoring.setMethodName("k");

+		_refactoring.setVisibility(Modifier.PRIVATE);

+		_refactoring.checkInitialConditions(new NullProgressMonitor());

+		IMethod[] inheritedMethods = TypeHelper.getInheritedMethods(_t3r2, true, true, false, null);

+		RefactoringStatus expected = RefactoringUtil.addOverloadingWarning(new ExtractMethodOverloadingMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkOverloading(inheritedMethods, _refactoring.getMethodName(), fetchNewParameterTypes(),

+				new ExtractMethodOverloadingMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.OVERLOADING));

+	}

+

+	// =====================================================================================

+	// Testing ambiguity

+	// =====================================================================================

+

+	public void testCheckAmbiguityInRoleMethodSpec1() throws Exception {

+		// check ambiguous role method specifier in callin binding of T2.R1

+		RefactoringStatus expected = RefactoringUtil.addAmbiguityFatalError(null, new ExtractMethodAmbuguityMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkForAmbiguousRoleMethodSpecs(_t2r1, "m", new ExtractMethodAmbuguityMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+	}

+

+	public void testCheckAmbiguityInRoleMethodSpec2() throws Exception {

+		// check ambiguous role method specifier in callin binding of T3.R1

+		RefactoringStatus expected = RefactoringUtil.addAmbiguityFatalError(null, new ExtractMethodAmbuguityMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkForAmbiguousRoleMethodSpecs(_t3r1, "m", new ExtractMethodAmbuguityMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+	}

+

+	public void testCheckAmbiguityInRoleMethodSpec3() throws Exception {

+		// check ambiguous role method specifier in callout binding of T3.R2

+		RefactoringStatus expected = RefactoringUtil.addAmbiguityFatalError(null, new ExtractMethodAmbuguityMsgCreator());

+		RefactoringStatus actual = RefactoringUtil.checkForAmbiguousRoleMethodSpecs(_t3r2, "m", new ExtractMethodAmbuguityMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+	}

+

+	public void testCheckAmbiguityInBaseMethodSpec1() throws Exception {

+		// check ambiguous base method specifier in callin binding of T2.R1

+		RefactoringStatus expected = RefactoringUtil.addAmbiguityFatalError(null, new ExtractMethodAmbuguityMsgCreator());

+		ArrayList<IRoleType> boundRole = new ArrayList<IRoleType>();

+		boundRole.add(_t2r1);

+		RefactoringStatus actual = RefactoringUtil.checkForAmbiguousBaseMethodSpecs(boundRole, "f", "", new ExtractMethodAmbuguityMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+	}

+

+	public void testCheckAmbiguityInBaseMethodSpec2() throws Exception {

+		// check ambiguous base method specifier in callout binding of T3.R2

+		RefactoringStatus expected = RefactoringUtil.addAmbiguityFatalError(null, new ExtractMethodAmbuguityMsgCreator());

+		ArrayList<IRoleType> boundRole = new ArrayList<IRoleType>();

+		boundRole.add(_t3r2);

+		RefactoringStatus actual = RefactoringUtil.checkForAmbiguousBaseMethodSpecs(boundRole, "f", "", new ExtractMethodAmbuguityMsgCreator());

+		assertEquals(expected.getSeverity(), actual.getSeverity());

+		assertNotNull(expected.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+		assertNotNull(actual.getEntryMatchingCode(Corext.getPluginId(), OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER));

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTestSetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTestSetup.java
new file mode 100644
index 0000000..0c6e9e3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTestSetup.java
@@ -0,0 +1,149 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;

+

+import java.util.Hashtable;

+

+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.core.JavaCore;

+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;

+import org.eclipse.jdt.internal.ui.JavaPlugin;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;

+import org.eclipse.ltk.core.refactoring.RefactoringCore;

+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;

+import org.eclipse.objectteams.otdt.ui.tests.util.TestOptions;

+

+/**

+ * @author brcan

+ */

+@SuppressWarnings({ "nls", "restriction" })

+public class ExtractMethodTestSetup extends TestSetup

+{

+	private IJavaProject _javaProject;

+	private IPackageFragmentRoot _root;

+	private static final String CONTAINER = "src";

+

+//	private IPackageFragment _selectionPackage;

+	

+    private IPackageFragment _teamClassPackage;

+    private IPackageFragment _roleClassPackage;

+	private IPackageFragment _nestedTeamPackage;

+	private IPackageFragment _rolefilePackage;

+	private IPackageFragment _rolefileParentPackage;

+	private IPackageFragment _focusTypePackage;

+	private IPackageFragment _overloadingPackage;

+	

+    public ExtractMethodTestSetup(Test test)

+    {

+        super(test);

+    }

+    

+	public IPackageFragmentRoot getRoot() {

+		return _root;

+	}

+

+    @SuppressWarnings("unchecked")

+	protected void setUp() throws Exception

+    {

+		Hashtable options = TestOptions.getFormatterOptions();

+		options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.TAB);

+		options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "0");

+		options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");

+		JavaCore.setOptions(options);

+		TestOptions.initializeCodeGenerationOptions();

+		JavaPlugin.getDefault().getCodeTemplateStore().load();		

+		

+		_javaProject = JavaProjectHelper.createOTJavaProject("TestProject", "bin");

+		JavaProjectHelper.addRTJar(_javaProject);

+		_root = JavaProjectHelper.addSourceContainer(_javaProject, CONTAINER);

+		

+		RefactoringCore.getUndoManager().flush();

+		IWorkspace workspace = ResourcesPlugin.getWorkspace();

+		IWorkspaceDescription description = workspace.getDescription();

+		description.setAutoBuilding(false);

+		workspace.setDescription(description);

+

+		//new packages for OT/J tests

+		_teamClassPackage = getRoot().createPackageFragment("team_in", true, null);

+		_roleClassPackage = getRoot().createPackageFragment("role_in", true, null);

+		_rolefilePackage       = getRoot().createPackageFragment("roleFile_in.TeamWithRoleFile", true, null);

+		_rolefileParentPackage = getRoot().createPackageFragment("roleFile_in", true, null);

+		_nestedTeamPackage = getRoot().createPackageFragment("nestedTeam_in", true, null);

+		_focusTypePackage = getRoot().createPackageFragment("focusType_in", true, null);

+		_overloadingPackage = getRoot().createPackageFragment("overloading_in", true, null);

+		

+//		_selectionPackage = getRoot().createPackageFragment("selection", true, null);

+    }

+

+	protected void tearDown() throws Exception

+	{

+		RefactoringTest.performDummySearch(_javaProject);

+		JavaProjectHelper.delete(_javaProject);

+	}

+	

+//	public IPackageFragment getSelectionPackage()

+//	{

+//	    return _selectionPackage;

+//	}

+

+	public IPackageFragment getTeamClassPackage()

+	{

+	    return _teamClassPackage;

+	}

+

+	public IPackageFragment getRoleClassPackage()

+	{

+	    return _roleClassPackage;

+	}

+	

+	public IPackageFragment getNestedTeamPackage()

+	{

+	    return _nestedTeamPackage;

+	}

+

+	public IPackageFragment getRoleFilePackage()

+	{

+	    return _rolefilePackage;

+	}

+

+	public IPackageFragment getRoleFileParentPackage()

+	{

+	    return _rolefileParentPackage;

+	}

+	

+	public IPackageFragment getFocusTypePackage()

+	{

+	    return _focusTypePackage;

+	}

+	

+	public IPackageFragment getOverloadingPackage()

+	{

+	    return _overloadingPackage;

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTests.java
new file mode 100644
index 0000000..c0eb561
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractMethodTests.java
@@ -0,0 +1,480 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;
+
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+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.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring;
+
+/**
+ * @author brcan
+ * 
+ */
+@SuppressWarnings({ "nls", "restriction" })
+public class ExtractMethodTests extends AbstractSelectionTestCase
+{
+	private static ExtractMethodTestSetup _testSetup;
+	
+    public ExtractMethodTests(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+		_testSetup = new ExtractMethodTestSetup(new TestSuite(ExtractMethodTests.class));
+		return _testSetup;
+	}
+
+	protected IPackageFragmentRoot getRoot()
+	{
+		return _testSetup.getRoot();
+	}
+	
+	protected String getResourceLocation()
+	{
+		return "ExtractMethod/";
+	}
+	
+	protected String adaptName(String name)
+	{
+	    if (getName().startsWith("testFocusType"))
+	    {
+	        return super.adaptName(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 _testSetup.getSelectionPackage();
+// 	}
+	
+	protected void performTest(
+	        IPackageFragment packageFragment,
+	        String[] ids,
+	        int mode,
+	        String outputFolder) throws Exception
+	{
+		performTest(packageFragment, ids, mode, outputFolder, null, null, 0);
+	}
+	
+	@SuppressWarnings("unchecked")
+	protected void performTest(
+	        IPackageFragment packageFragment,
+	        String[] ids,
+	        int mode,
+	        String outputFolder,
+	        String[] newNames,
+	        int[] newOrder,
+	        int destination) throws Exception
+	{
+	    ICompilationUnit[] compUnits = createCUs(packageFragment, ids);
+		String source = compUnits[0].getSource();
+		int[] selection = getSelection(source);
+		ExtractMethodRefactoring refactoring = new ExtractMethodRefactoring(
+		        compUnits[0],
+		        selection[0],
+		        selection[1]);
+		refactoring.setMethodName("extracted");
+		refactoring.setVisibility(Modifier.PROTECTED);
+		RefactoringStatus status =
+		    refactoring.checkInitialConditions(new NullProgressMonitor());
+		switch (mode)
+		{
+			case VALID_SELECTION:
+				assertTrue(status.isOK());
+				break;
+			case INVALID_SELECTION:
+				if (!status.isOK())
+					return;
+		}
+		List parameters = refactoring.getParameterInfos();
+		if (newNames != null && newNames.length > 0)
+		{
+			for (int idx= 0; idx < newNames.length; idx++)
+			{
+				if (newNames[idx] != null)
+				{
+					((ParameterInfo)parameters.get(idx)).setNewName(newNames[idx]);
+				}
+			}
+		}
+		if (newOrder != null && newOrder.length > 0)
+		{
+			assertTrue(newOrder.length == parameters.size());
+			List current = new ArrayList(parameters);
+			for (int idx= 0; idx < newOrder.length; idx++)
+			{
+				parameters.set(newOrder[idx], current.get(idx));
+			}
+		}
+		refactoring.setDestination(destination);
+		
+		String out = null;
+		switch (mode)
+		{
+			case COMPARE_WITH_OUTPUT:
+			    out = getProofedContent(outputFolder, ids[0]);
+			    break;		
+		}
+		performTest(compUnits[0], refactoring, mode, out, true);
+	}
+	
+    private ICompilationUnit[] createCUs(
+            IPackageFragment packageFragment,
+            String[] ids)
+		throws Exception
+	{
+	    ICompilationUnit[] cus = new ICompilationUnit[ids.length];
+	
+	    for (int idx = 0; idx < ids.length; idx++)
+	    {
+	        Assert.isNotNull(ids[idx]);
+	        cus[idx] = createCU(packageFragment, ids[idx]);
+	    }
+	    return cus;
+	}
+
+	protected int getCheckingStyle()
+	{
+		return CheckConditionsOperation.FINAL_CONDITIONS;
+	}
+
+	/********** tests **********/
+	//=====================================================================================
+	// Testing team classes
+	//=====================================================================================
+
+	//extract method invocation in team
+	public void testTeamclass1() throws Exception
+    {
+	    performTest(
+	            _testSetup.getTeamClassPackage(),
+	            new String[]{"T"},
+	            COMPARE_WITH_OUTPUT,
+	            "team_out");
+    }
+	//extract expression in team 
+	public void testTeamclass2() throws Exception
+    {
+	    performTest(
+	            _testSetup.getTeamClassPackage(),
+	            new String[]{"T"},
+	            COMPARE_WITH_OUTPUT,
+	            "team_out");
+    }
+
+	//=====================================================================================
+	// Testing role classes
+	//=====================================================================================
+
+	//extract method invocation in unbound role
+	public void testRoleclass1() throws Exception
+    {
+	    performTest(
+	            _testSetup.getRoleClassPackage(),
+	            new String[]{"T"},
+	            COMPARE_WITH_OUTPUT,
+	            "role_out");
+    }
+	//extract expression in unbound role
+	public void testRoleclass2() throws Exception
+	{
+	    performTest(
+	            _testSetup.getRoleClassPackage(),
+	            new String[]{"T"},
+	            COMPARE_WITH_OUTPUT,
+	            "role_out");
+	}
+
+	//=====================================================================================
+	// Testing nested teams
+	//=====================================================================================
+
+	/* passing */
+	//extract method invocation in unbound nested team
+	public void testNestedTeam1() throws Exception
+    {
+	    performTest(
+	            _testSetup.getNestedTeamPackage(),
+	            new String[]{"T1"},
+	            COMPARE_WITH_OUTPUT, 
+	            "nestedTeam_out");
+    }
+	//extract method invocation in inner role of unbound nested team
+	public void testNestedTeam2() throws Exception
+    {
+	    performTest(
+	            _testSetup.getNestedTeamPackage(),
+	            new String[]{"T1"},
+	            COMPARE_WITH_OUTPUT, 
+	            "nestedTeam_out");
+    }
+
+	/* failing */
+	//extract method invocation in bound nested team -> ambiguous base method spec
+	public void testNestedTeam3() throws Exception
+    {
+		performTest(
+		        _testSetup.getNestedTeamPackage(),
+		        new String[] {"B", "T1"},
+		        INVALID_SELECTION,
+		        "nestedTeam_out");
+    }
+	//extract method invocation in bound nested team -> ambiguous role method spec
+	public void testNestedTeam4() throws Exception
+    {
+		performTest(
+		        _testSetup.getNestedTeamPackage(),
+		        new String[] {"T1", "B"},
+		        INVALID_SELECTION,
+		        "nestedTeam_out");
+    }
+	//extract method invocation in bound inner role of nested team ->
+	//ambiguous base method spec 
+	public void testNestedTeam5() throws Exception
+    {
+		performTest(
+		        _testSetup.getNestedTeamPackage(),
+		        new String[] {"B", "T1"},
+		        INVALID_SELECTION,
+		        "nestedTeam_out");
+    }
+	//extract method invocation in bound inner role of nested team ->
+	//ambiguous role method spec 
+	public void testNestedTeam6() throws Exception
+    {
+		performTest(
+		        _testSetup.getNestedTeamPackage(),
+		        new String[] {"T1", "B"},
+		        INVALID_SELECTION,
+		        "nestedTeam_out");
+    }
+	
+	//=====================================================================================
+	// Testing role files
+	//=====================================================================================
+
+	//extract method invocation in role file (unbound role)
+	public void testRoleFile1() throws Exception
+	{
+		establishTeamCU("TeamWithRoleFile.java");
+	    performTest(
+	            _testSetup.getRoleFilePackage(),
+	            new String[]{"R"},
+			    COMPARE_WITH_OUTPUT,
+			    "roleFile_out/TeamWithRoleFile");
+
+	}
+
+	//extract expression in role file (unbound role)
+	public void testRoleFile2() throws Exception
+	{
+		establishTeamCU("TeamWithRoleFile.java");
+	    performTest(
+	            _testSetup.getRoleFilePackage(),
+	            new String[]{"R"},
+	            COMPARE_WITH_OUTPUT,
+	    		"roleFile_out/TeamWithRoleFile");
+	}
+
+	ICompilationUnit teamCU = null;
+
+	private void establishTeamCU(String teamFileName) throws Exception, IOException {
+		if (teamCU != null) return;
+		IPackageFragment pack = _testSetup.getRoleFileParentPackage();
+		teamCU = createCU(pack, teamFileName, getFileInputStream(myGetFilePath(pack, teamFileName)));
+	}
+	//	=====================================================================================
+	// 	Testing overloading and/or ambiguity for different focus types
+	//	=====================================================================================	
+
+	//focus implicit role hierarchy
+	public void testFocusTypeIsSuperroleInRoleHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"T1", "A", "B", "C"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+	
+	public void testFocusTypeIsMiddleRoleInRoleHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"T2", "T1", "A", "B", "C"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+
+	public void testFocusTypeIsLowestRoleInRoleHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"T3", "T2", "T1", "A", "B", "C"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+
+	//focus base hierarchy
+	public void testFocusTypeIsSuperBasetypeInBaseHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"A", "B", "C", "T1", "T2", "T3"},
+		        INVALID_SELECTION,
+		        "focusType_out");        
+    }
+	
+	public void testFocusTypeIsMiddleBasetypeInBaseHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"B", "A", "C", "T1", "T2", "T3"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+	
+	public void testFocusTypeIsLowestBasetypeInBaseHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"C", "B", "A", "T1", "T2", "T3"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+		
+	//focus team hierarchy
+	public void testFocusTypeIsSuperteamInTeamHierachy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"FocusTeam1"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+	
+	public void testFocusTypeIsMiddleTeamInTeamHierachy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"FocusTeam2", "FocusTeam1"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+
+	public void testFocusTypeIsLowestTeamInTeamHierarchy() throws Exception
+    {
+		performTest(
+		        _testSetup.getFocusTypePackage(),
+		        new String[] {"FocusTeam3", "FocusTeam2", "FocusTeam1"},
+		        INVALID_SELECTION,
+		        "focusType_out");
+    }
+
+	// role is a indirect subclass of target class, explicit inheritance only, short methodSpec
+	public void test20() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "B", "Base1", "Team1"},
+		        INVALID_SELECTION,
+		        "overloading_out");
+	}
+	
+	// role is a indirect subclass of target class, explicit + implicit inheritance, short methodSpec
+	public void test21() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "B", "Base1", "Team1", "Team2"},
+		        INVALID_SELECTION,
+		        "overloading_out");
+	}
+	
+	// role is a indirect subclass of target class, explicit + implicit inheritance, long methodSpec
+	public void test22() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "B", "Base1", "Team1", "Team2"},
+		        COMPARE_WITH_OUTPUT,
+		        "overloading_out");
+	}
+	
+	// bound base class is target class, short methodSpec 
+	public void test23() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "Team1"},
+		        INVALID_SELECTION,
+		        "overloading_out");
+	}
+	
+	// bound base class is direct/indirect subclass of target class, short methodSpec
+	public void test24() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "Base1", "Team1"},
+		        INVALID_SELECTION,
+		        "overloading_out");
+	}
+	
+	// base class is subclass of target class, long methodSpec
+	public void test25() throws Exception
+	{
+		performTest(
+		        _testSetup.getOverloadingPackage(),
+		        new String[] {"A", "Base1", "Team1"},
+		        COMPARE_WITH_OUTPUT,
+		        "overloading_out");
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTestSetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTestSetup.java
new file mode 100644
index 0000000..0fe22a0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTestSetup.java
@@ -0,0 +1,96 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;

+

+import java.util.Hashtable;

+

+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.core.JavaCore;

+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;

+import org.eclipse.jdt.internal.ui.JavaPlugin;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;

+import org.eclipse.ltk.core.refactoring.RefactoringCore;

+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;

+import org.eclipse.objectteams.otdt.ui.tests.util.TestOptions;

+

+/**

+ * @author stephan

+ */

+public class ExtractTempTestSetup extends TestSetup

+{

+	private IJavaProject _javaProject;

+	private IPackageFragmentRoot _root;

+	private static final String CONTAINER = "src";

+

+	private IPackageFragment _statementsPackage;

+

+    public ExtractTempTestSetup(Test test)

+    {

+        super(test);

+    }

+    

+	public IPackageFragmentRoot getRoot() {

+		return _root;

+	}

+

+    protected void setUp() throws Exception

+    {

+		Hashtable options = TestOptions.getFormatterOptions();

+		options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.TAB);

+		options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "0");

+		options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");

+		JavaCore.setOptions(options);

+		TestOptions.initializeCodeGenerationOptions();

+		JavaPlugin.getDefault().getCodeTemplateStore().load();		

+		

+		_javaProject = JavaProjectHelper.createOTJavaProject("TestProject", "bin");

+		JavaProjectHelper.addRTJar(_javaProject);

+		_root = JavaProjectHelper.addSourceContainer(_javaProject, CONTAINER);

+		

+		RefactoringCore.getUndoManager().flush();

+		IWorkspace workspace = ResourcesPlugin.getWorkspace();

+		IWorkspaceDescription description = workspace.getDescription();

+		description.setAutoBuilding(false);

+		workspace.setDescription(description);

+

+		//new packages for OT/J tests

+		_statementsPackage = getRoot().createPackageFragment("statements_in", true, null);

+    }

+

+	protected void tearDown() throws Exception

+	{

+		RefactoringTest.performDummySearch(_javaProject);

+		JavaProjectHelper.delete(_javaProject);

+	}

+	

+	public IPackageFragment getStatementsPackage()

+	{

+	    return _statementsPackage;

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTests.java
new file mode 100644
index 0000000..596ecb3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/extractmethod/ExtractTempTests.java
@@ -0,0 +1,209 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.extractmethod;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+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.internal.corext.refactoring.code.ExtractTempRefactoring;
+import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
+import org.eclipse.ltk.core.refactoring.CheckConditionsOperation;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+
+/**
+ * @author stephan
+ * 
+ */
+@SuppressWarnings("restriction")
+public class ExtractTempTests extends AbstractSelectionTestCase
+{
+	private static ExtractTempTestSetup _testSetup;
+
+    public ExtractTempTests(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+		_testSetup = new ExtractTempTestSetup(new TestSuite(ExtractTempTests.class));
+		return _testSetup;
+	}
+
+	protected IPackageFragmentRoot getRoot()
+	{
+		return _testSetup.getRoot();
+	}
+	
+	protected String getResourceLocation()
+	{
+		return "ExtractTemp/";
+	}
+	
+	protected String adaptName(String name)
+	{
+	    if (getName().startsWith("testFocusType"))
+	    {
+	        return super.adaptName(name);
+	    }
+		return name + "_" + getName() + ".java";
+	}	
+	
+	protected void performTest(
+	        int startLine,
+	        int startColumn,
+	        int endLine,
+	        int endColumn,
+	        boolean declareFinal,
+	        String outputFolder) throws Exception
+	{
+		performTest(_testSetup.getStatementsPackage(),
+					new String[]{"T"},
+					startLine, 
+					startColumn, endLine, endColumn, 
+					COMPARE_WITH_OUTPUT, declareFinal, 
+					outputFolder);
+	}
+	
+	protected void performTest(
+	        IPackageFragment packageFragment,
+	        String[] ids,
+	        int startLine,
+	        int startColumn,
+	        int endLine,
+	        int endColumn,
+	        int mode,
+	        String outputFolder) throws Exception
+	{
+		performTest(packageFragment, ids, startLine, startColumn, endLine, endColumn, mode, false, outputFolder);
+	}
+	
+	protected void performTest(
+	        IPackageFragment packageFragment,
+	        String[] ids,
+	        int startLine,
+	        int startColumn,
+	        int endLine,
+	        int endColumn,
+	        int mode,
+	        boolean declareFinal,
+	        String outputFolder) throws Exception
+	{
+	    ICompilationUnit[] compUnits = createCUs(packageFragment, ids);
+		ISourceRange selection= TextRangeUtil.getSelection(compUnits[0], startLine, startColumn, endLine, endColumn);
+		ExtractTempRefactoring refactoring = new ExtractTempRefactoring(
+		        compUnits[0],
+		        selection.getOffset(),
+		        selection.getLength());
+		refactoring.setTempName("extracted");
+		refactoring.setDeclareFinal(declareFinal);
+		RefactoringStatus status =
+		    refactoring.checkInitialConditions(new NullProgressMonitor());
+		switch (mode)
+		{
+			case VALID_SELECTION:
+				assertTrue(status.isOK());
+				break;
+			case INVALID_SELECTION:
+				if (!status.isOK())
+					return;
+		}
+		
+		String out = null;
+		switch (mode)
+		{
+			case COMPARE_WITH_OUTPUT:
+			    out = getProofedContent(outputFolder, ids[0]);
+			    break;		
+		}
+		performTest(compUnits[0], refactoring, mode, out, true);
+	}
+	
+    private ICompilationUnit[] createCUs(
+            IPackageFragment packageFragment,
+            String[] ids)
+		throws Exception
+	{
+	    ICompilationUnit[] cus = new ICompilationUnit[ids.length];
+	
+	    for (int idx = 0; idx < ids.length; idx++)
+	    {
+	        Assert.isNotNull(ids[idx]);
+	        cus[idx] = createCU(packageFragment, ids[idx]);
+	    }
+	    return cus;
+	}
+
+	protected int getCheckingStyle()
+	{
+		return CheckConditionsOperation.FINAL_CONDITIONS;
+	}
+
+	/********** tests **********/
+	//=====================================================================================
+	// Testing within statement
+	//=====================================================================================
+
+	//extract team instantiation expression "new T_x()" from within.team_expression
+	public void testWithin1() throws Exception
+    {
+	    performTest(9, 16, 9, 35,
+	    			false,
+	            	"statements_out");
+    }
+	// body is single statement instead of block
+	public void testWithin2() throws Exception
+    {
+	    performTest(9, 16, 9, 35,
+	            	false,
+	            	"statements_out");
+    }
+	
+	// two element path, extracted is a dependent type
+	public void testTypeAnchor1() throws Exception 
+	{
+		performTest(15,13,15,18,
+					true,
+					"statements_out");
+	}
+
+	// three element path, extracted is not a dependent type
+	public void testTypeAnchor2() throws Exception 
+	{
+		performTest(21,13,21,20,
+					true,
+					"statements_out");
+	}
+
+	// three element path, extracted is a dependent type
+	public void testTypeAnchor3() throws Exception 
+	{
+		performTest(19,13,19,20,
+					true,
+					"statements_out");
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/AllTests.java
new file mode 100644
index 0000000..b7e071e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/AllTests.java
@@ -0,0 +1,44 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.inlinecallin;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-InlineCallin-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.inlinecallin.InlineCallinTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/InlineCallinTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/InlineCallinTests.java
new file mode 100644
index 0000000..7507f35
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/inlinecallin/InlineCallinTests.java
@@ -0,0 +1,345 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.inlinecallin;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.objectteams.otdt.core.ICallinMapping;
+import org.eclipse.objectteams.otdt.core.IMethodMapping;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.internal.core.CallinMapping;
+import org.eclipse.objectteams.otdt.internal.refactoring.otrefactorings.inlinecallin.InlineCallinRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * 
+ * @author Johannes Gebauer
+ */
+@SuppressWarnings("restriction")
+public class InlineCallinTests extends RefactoringTest {
+	private static final String REFACTORING_PATH = "InlineCallin/";
+
+	public InlineCallinTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new MySetup(new TestSuite(InlineCallinTests.class));
+	}
+
+	public static Test setUpTest(Test test) {
+		return new MySetup(test);
+	}
+
+	protected String getRefactoringPath() {
+		return REFACTORING_PATH;
+	}
+
+	private ICompilationUnit[] createCUs(String[] cuNames) throws Exception {
+		ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+		for (int idx = 0; idx < cuNames.length; idx++) {
+			Assert.isNotNull(cuNames[idx]);
+			cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+		}
+		return cus;
+	}
+
+	private static InlineCallinRefactoring createInlineCallinRefactoring(IMethod roleMethod, ICallinMapping[] callinMappings, IMethod[] baseMethods)
+			throws JavaModelException {
+		IJavaProject project = null;
+		if (callinMappings[0] != null) {
+			project = callinMappings[0].getJavaProject();
+			InlineCallinRefactoring refactoring = new InlineCallinRefactoring(roleMethod, callinMappings, baseMethods);
+			return refactoring;
+		}
+		return null;
+	}
+
+	/**
+	 * The <code>ICompilationUnit</code> containing the role that defines the
+	 * <code>ICallinMapping</code> at position 0 and its base at position 1.
+	 * 
+	 */
+	private void performInlineCallin_pass(String[] cuNames, String roleMethodName, String[] roleMethodSignature, String[] baseMethodNames, String[][] baseMethodSignatures,
+			int[] mappingKinds, boolean deleteRoleMethod, String roleName, String baseName) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType roleType = getType(cus[0], roleName);
+			IType baseType = getType(cus[1], baseName);
+
+			IMethod roleMethod = roleType.getMethod(roleMethodName, roleMethodSignature);
+			assertTrue("role method " + roleMethod.getElementName() + " does not exist", roleMethod.exists());
+
+			IMethod[] baseMethods = new IMethod[baseMethodNames.length];
+			for (int i = 0; i < baseMethods.length; i++) {
+				baseMethods[i] = baseType.getMethod(baseMethodNames[i], baseMethodSignatures[i]);
+				assertTrue("base method " + baseMethods[i].getElementName() + " does not exist", baseMethods[i].exists());
+
+			}
+			
+			ICallinMapping[] mappings = new ICallinMapping[baseMethodNames.length];
+			for (int i = 0; i < mappings.length; i++) {
+				mappings[i] = getCallinMethodMapping(roleType, roleMethod, baseMethods[i], mappingKinds[i]);
+				assertNotNull("the described callin method mapping does not exist", mappings[i]);
+			}
+
+			InlineCallinRefactoring ref = createInlineCallinRefactoring(roleMethod, mappings, baseMethods);
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+
+			ref.setDeleteRoleMethod(deleteRoleMethod);
+	
+			RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor());
+			assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+			performChange(ref, false);
+
+			for (int i = 0; i < cus.length; i++) {
+				String expected = getFileContents(getOutputTestFileName(cuNames[i]));
+				String actual = cus[i].getSource();
+				assertEqualLines(expected, actual);
+			}
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+	
+	/**
+	 * The <code>ICompilationUnit</code> containing the role that defines the
+	 * <code>ICallinMapping</code> at position 0 and its base at position 1.
+	 * 
+	 */
+	private void performInlineCallin_failing(String[] cuNames, String roleMethodName, String[] roleMethodSignature, String[] baseMethodNames,
+			String[][] baseMethodSignatures, int[] mappingKinds, boolean deleteRoleMethod, String roleName, String baseName) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType roleType = getType(cus[0], roleName);
+			IType baseType = getType(cus[1], baseName);
+
+			IMethod roleMethod = roleType.getMethod(roleMethodName, roleMethodSignature);
+			assertTrue("role method " + roleMethod.getElementName() + " does not exist", roleMethod.exists());
+
+			IMethod[] baseMethods = new IMethod[baseMethodNames.length];
+			for (int i = 0; i < baseMethods.length; i++) {
+				baseMethods[i] = baseType.getMethod(baseMethodNames[i], baseMethodSignatures[i]);
+				assertTrue("base method " + baseMethods[i].getElementName() + " does not exist", baseMethods[i].exists());
+
+			}
+
+			ICallinMapping[] mappings = new ICallinMapping[baseMethodNames.length];
+			for (int i = 0; i < mappings.length; i++) {
+				mappings[i] = getCallinMethodMapping(roleType, roleMethod, baseMethods[i], mappingKinds[i]);
+				assertNotNull("the described callin method mapping does not exist", mappings[i]);
+			}
+
+			InlineCallinRefactoring ref = createInlineCallinRefactoring(roleMethod, mappings, baseMethods);
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+
+			ref.setDeleteRoleMethod(deleteRoleMethod);
+			
+			RefactoringStatus result = performRefactoring(ref);
+			assertNotNull("precondition was supposed to fail.", result);
+			assertTrue("precondition was supposed to fail.", !result.isOK());
+			assertNotNull("precondition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR));
+			
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+
+	private ICallinMapping getCallinMethodMapping(IType roleType, IMethod roleMethod, IMethod baseMethod, int mappingKind) throws JavaModelException {
+		IRoleType role = (IRoleType) OTModelManager.getOTElement(roleType);
+		assertNotNull("type " + roleType.getElementName() + " is not a role", role);
+		
+		IMethodMapping[] mappings = role.getMethodMappings();
+		
+		for (int i = 0; i < mappings.length; i++) {
+			if (mappings[i] instanceof ICallinMapping) {
+				ICallinMapping mapping = (ICallinMapping) mappings[i];
+				
+				for (int j = 0; j < mapping.getBoundBaseMethods().length; j++) {
+					IMethod roleMethod2 = mapping.getRoleMethod();
+					IMethod baseMethod2 = mapping.getBoundBaseMethods()[j];
+					if (roleMethod2.equals(roleMethod) && baseMethod2.equals(baseMethod) && mapping.getCallinKind() == mappingKind) {
+						return mapping;
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
+
+	/******* tests ******************/
+
+	/* Inline Callin Tests */
+	
+	public void testSimpleBeforeCallin() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] }, new int[] { CallinMapping.KIND_BEFORE }, false, "R", "B");
+	}
+
+	public void testSimpleAfterCallin() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+
+	public void testSimpleReplaceCallin() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+	
+	public void testAfterCallinWithReturn() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}	
+	
+	public void testReplaceCallinResultTunneling1() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+
+	public void testReplaceCallinResultTunneling2() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+		
+	public void testReplaceCallinWithReturn() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+		
+	public void testDifferentParamNames() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[] { "I" }, new String[] { "m" }, new String[][] { new String[] { "I" } }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}	
+	
+	public void testDifferentParamLength() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[] { "I" }, new String[] { "m" }, new String[][] { new String[] { "I", "QString;" } }, new int[] { CallinMapping.KIND_REPLACE }, false, "R",
+				"B");
+	}	
+	
+	public void testSimpleParameterMapping() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[] { "I" }, new String[] { "m" }, new String[][] { new String[] { "I", "I" } },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+
+	public void testReplaceWithParameterMapping() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[] { "I" }, new String[] { "m" }, new String[][] { new String[] { "I", "I" } },
+				new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+		
+	public void testReplaceCallinWithMultipleReturns() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+	
+	public void testReplaceCallinWithParameter() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[] { "I", "QString;" }, new String[] { "m" }, new String[][] { new String[] { "I", "QString;" } }, new int[] { CallinMapping.KIND_REPLACE },
+				false, "R", "B");
+	}
+	
+	public void testCallinMappingWithSignature() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testMultipleBaseMethodCallin() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testRoleMethodReferencesCallout() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testRoleMethodReferencesCalloutToFieldGet() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testRoleMethodReferencesCalloutToFieldSet() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testParameterTunneling1() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[] { "I" } }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}	
+	
+	public void testParameterTunneling2() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[] { "I" } }, new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}	
+	
+	public void testInlineMultipleCallins() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m1", "m2" }, new String[][] { new String[0], new String[0] },
+				new int[] { CallinMapping.KIND_AFTER, CallinMapping.KIND_AFTER }, false, "R", "B");
+	}
+	
+	public void testDeleteRoleMethod() throws Exception {
+		performInlineCallin_pass(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_REPLACE }, true, "R", "B");
+	}
+	
+	public void testDeleteReferencedRoleMethod() throws Exception {
+		performInlineCallin_failing(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_BEFORE }, true, "R", "B");
+	}
+	
+	public void testInlineBoundCallin1() throws Exception {
+		performInlineCallin_failing(new String[] { "T1", "B", "T2" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+	
+	public void testInlineBoundCallin2() throws Exception {
+		performInlineCallin_failing(new String[] { "T1", "B", "T2" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_REPLACE }, false, "R", "B");
+	}
+	
+	public void testDependencyToRole1() throws Exception {
+		performInlineCallin_failing(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_BEFORE }, false, "R", "B");
+	}
+	
+	public void testDependencyToRole2() throws Exception {
+		performInlineCallin_failing(new String[] { "T", "B" }, "n", new String[0], new String[] { "m" }, new String[][] { new String[0] },
+				new int[] { CallinMapping.KIND_BEFORE }, false, "R", "B");
+	}
+	
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/AllTests.java
new file mode 100644
index 0000000..f99b76b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/AllTests.java
@@ -0,0 +1,50 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.move;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-Move-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.move.MoveInstanceMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.move.MoveStaticMethodTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveInstanceMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveInstanceMethodTests.java
new file mode 100644
index 0000000..70b6842
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveInstanceMethodTests.java
@@ -0,0 +1,696 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.move;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import org.eclipse.core.runtime.Assert;

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IJavaElement;

+import org.eclipse.jdt.core.IMethod;

+import org.eclipse.jdt.core.ISourceRange;

+import org.eclipse.jdt.core.JavaModelException;

+import org.eclipse.jdt.core.dom.IVariableBinding;

+import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInstanceMethodProcessor;

+import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;

+import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;

+import org.eclipse.ltk.core.refactoring.Refactoring;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring;

+import org.eclipse.objectteams.otdt.internal.refactoring.corext.base.OTRefactoringStatusCodes;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;

+

+/**

+ * @author brcan

+ *  

+ */

+@SuppressWarnings({ "restriction", "nls" })

+public class MoveInstanceMethodTests extends RefactoringTest

+{

+    private static final String REFACTORING_PATH = "MoveInstanceMethod/";

+

+    private static final int PARAMETER = 0;

+    private static final int FIELD = 1;

+

+    private boolean toSucceed;

+

+    public MoveInstanceMethodTests(String name)

+    {

+        super(name);

+    }

+

+    public static Test suite()

+    {

+        if (false)

+        {

+            TestSuite suite = new TestSuite(MoveInstanceMethodTests.class.getName());

+            suite.addTest(new MoveInstanceMethodTests("testRoleclass1"));

+	        return new MySetup(suite);

+        }

+        return new MySetup(new TestSuite(MoveInstanceMethodTests.class));

+    }

+

+    protected String getRefactoringPath()

+    {

+        return REFACTORING_PATH + successPath();

+    }

+

+    private String successPath()

+    {

+        return toSucceed ? "/canMove/" : "/cannotMove/";

+    }

+

+    private void performAndCheckSelectedCU_passing(

+            String[] cuQNames, String selectionCuQName,

+            int startLine, int startColumn, int endLine, int endColumn,

+            int newReceiverType, String newReceiverName,

+            boolean inlineDelegator, boolean removeDelegator, boolean expectWarning)

+    	throws Exception

+    {

+        int selectionCuIndex = firstIndexOf(selectionCuQName, cuQNames);

+        Assert.isTrue(selectionCuIndex != -1,

+                       "parameter selectionCuQName must match some String in cuQNames.");

+        performRefactoring_passing(cuQNames, selectionCuIndex, startLine, startColumn, endLine,

+                endColumn, newReceiverType, newReceiverName, null,

+                inlineDelegator, removeDelegator, expectWarning);

+    }

+

+    private int firstIndexOf(String one, String[] others)

+    {

+        for (int idx = 0; idx < others.length; idx++)

+        {

+            if (one == null && others[idx] == null || one.equals(others[idx]))

+            {

+                return idx;

+            }

+        }

+        return -1;

+    }

+

+    private void performRefactoring_passing(

+            String[] cuQNames, int selectionCuIndex,

+            int startLine, int startColumn, int endLine, int endColumn,

+            int newReceiverType, String newReceiverName, String newMethodName,

+            boolean inlineDelegator, boolean removeDelegator, boolean expectWarning)

+    	throws Exception

+    {

+        Assert.isTrue(0 <= selectionCuIndex

+                && selectionCuIndex < cuQNames.length);

+

+        toSucceed = true;

+

+        ICompilationUnit[] cus = createCUs(cuQNames);

+        ICompilationUnit selectionCu = cus[selectionCuIndex];

+

+        ISourceRange selection = TextRangeUtil.getSelection(selectionCu,

+                startLine, startColumn, endLine, endColumn);

+        IMethod method = getMethod(selectionCu, selection);

+        assertNotNull(method);

+        MoveInstanceMethodProcessor refProc = new MoveInstanceMethodProcessor(

+		        								method,

+		        								JavaPreferencesSettings.getCodeGenerationSettings(selectionCu.getJavaProject()));

+   		Refactoring ref= new MoveRefactoring(refProc);

+

+		assertNotNull("refactoring should be created", ref);

+		RefactoringStatus preconditionResult= ref

+			.checkInitialConditions(new NullProgressMonitor());

+

+		assertTrue("activation was supposed to be successful",

+			preconditionResult.isOK());

+

+        chooseNewReceiver(refProc, newReceiverType, newReceiverName);

+

+        refProc.setInlineDelegator(inlineDelegator);

+		refProc.setRemoveDelegator(removeDelegator);

+		refProc.setDeprecateDelegates(false);

+        if (newMethodName != null)

+        {

+            refProc.setMethodName(newMethodName);

+        }

+        preconditionResult.merge(ref.checkFinalConditions(new NullProgressMonitor()));

+        if (!expectWarning) {

+	        assertTrue("precondition was supposed to pass", preconditionResult

+	                .isOK());

+	

+	        assertFalse("no warnings expected", preconditionResult.hasWarning());

+        } else {

+        	assertTrue("warning expected", preconditionResult.hasWarning());

+        }

+        

+        performChange(ref, false);

+        for (int idx = 0; idx < cus.length; idx++)

+        {

+            String outputTestFileName = getOutputTestFileName(getSimpleName(cuQNames[idx]));

+            assertEqualLines("Incorrect inline in " + outputTestFileName,

+                    getFileContents(outputTestFileName), cus[idx].getSource());

+        }

+    }

+

+	private void performAndCheckSelectedCU_failing(

+	        String[] cuQNames, String selectionCuQName,

+            int startLine, int startColumn, int endLine, int endColumn,

+            int newReceiverType, String newReceiverName,

+            boolean inlineDelegator, boolean removeDelegator, int errorCode)

+		throws Exception

+    {

+        int selectionCuIndex = firstIndexOf(selectionCuQName, cuQNames);

+        Assert.isTrue(selectionCuIndex != -1,

+                       "parameter selectionCuQName must match some String in cuQNames.");

+        performRefactoring_failing(cuQNames, selectionCuIndex, startLine, startColumn,

+                endLine, endColumn, newReceiverType, newReceiverName, 

+                null, inlineDelegator, removeDelegator, errorCode);

+    }

+

+	private void performRefactoring_failing(

+	        String[] cuQNames, int selectionCuIndex,

+            int startLine, int startColumn, int endLine, int endColumn,

+            int newReceiverType, String newReceiverName, String newMethodName,

+            boolean inlineDelegator, boolean removeDelegator, int errorCode)

+		throws Exception

+    {

+        Assert.isTrue(0 <= selectionCuIndex

+                && selectionCuIndex < cuQNames.length);

+

+        toSucceed = false;

+

+        ICompilationUnit[] cus = createCUs(cuQNames);

+        ICompilationUnit selectionCu = cus[selectionCuIndex];

+

+        ISourceRange selection = TextRangeUtil.getSelection(selectionCu,

+                startLine, startColumn, endLine, endColumn);

+        IMethod method = getMethod(selectionCu, selection);

+        assertNotNull(method);

+        MoveInstanceMethodProcessor refProc = new MoveInstanceMethodProcessor(

+									                    method,

+									                    JavaPreferencesSettings.getCodeGenerationSettings(selectionCu.getJavaProject()));

+   		Refactoring ref= new MoveRefactoring(refProc);

+		if (ref == null)

+        {

+            assertTrue(errorCode != 0);

+        }

+        else

+        {

+			RefactoringStatus result= ref.checkInitialConditions(

+										   new NullProgressMonitor());

+	

+	        if (!result.isOK())

+	        {

+	            assertEquals(errorCode, result.getEntryMatchingSeverity(

+	                    RefactoringStatus.ERROR).getCode());

+	            return;

+	        }

+	        else

+	        {

+	            chooseNewReceiver(refProc, newReceiverType, newReceiverName);

+	

+	            refProc.setInlineDelegator(inlineDelegator);

+	            refProc.setRemoveDelegator(removeDelegator);

+	            refProc.setDeprecateDelegates(false);

+	            if (newMethodName != null)

+	                refProc.setMethodName(newMethodName);

+	

+	            result.merge(ref

+	            		.checkFinalConditions(new NullProgressMonitor()));

+	

+	            assertTrue("precondition checking is expected to fail.", !result.isOK());

+	            assertNotNull("precondition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR));

+	            assertEquals(errorCode, result.getEntryMatchingSeverity(

+	                    RefactoringStatus.ERROR).getCode());

+	        }

+        }

+    }	

+

+	private void performConditionChecking_warnings(

+	        String[] cuQNames, String selectionCuQName,

+            int startLine, int startColumn, int endLine, int endColumn,

+            int newReceiverType, String newReceiverName, String newMethodName,

+            boolean inlineDelegator, boolean removeDelegator, int errorCode)

+		throws Exception

+    {

+        int selectionCuIndex = firstIndexOf(selectionCuQName, cuQNames);

+        Assert.isTrue(selectionCuIndex != -1,

+                       "parameter selectionCuQName must match some String in cuQNames.");

+        Assert.isTrue(0 <= selectionCuIndex

+                && selectionCuIndex < cuQNames.length);

+

+        toSucceed = true;

+

+        ICompilationUnit[] cus = createCUs(cuQNames);

+        ICompilationUnit selectionCu = cus[selectionCuIndex];

+

+        ISourceRange selection = TextRangeUtil.getSelection(selectionCu,

+                startLine, startColumn, endLine, endColumn);

+        IMethod method = getMethod(selectionCu, selection);

+        assertNotNull(method);

+        MoveInstanceMethodProcessor refProc= new MoveInstanceMethodProcessor(

+									                method,

+									                JavaPreferencesSettings.getCodeGenerationSettings(selectionCu.getJavaProject()));

+        Refactoring ref = new MoveRefactoring(refProc);

+        if (ref == null)

+        {

+            assertTrue(errorCode != 0);

+        }

+        else

+        {

+            RefactoringStatus result = ref.checkInitialConditions(

+                    new NullProgressMonitor());

+	        if (!result.isOK())

+	        {

+	            assertEquals(errorCode, result.getEntryMatchingSeverity(

+	                    RefactoringStatus.ERROR).getCode());

+	            return;

+	        }

+	        else

+	        {

+	            chooseNewReceiver(refProc, newReceiverType, newReceiverName);

+	

+	            refProc.setInlineDelegator(inlineDelegator);

+	            refProc.setRemoveDelegator(removeDelegator);

+	            refProc.setDeprecateDelegates(false);

+	            if (newMethodName != null)

+	                refProc.setMethodName(newMethodName);

+	

+	            result.merge(ref

+	                    .checkFinalConditions(new NullProgressMonitor()));

+	

+	            assertTrue("warnings expected", result.hasWarning());

+	            assertEquals(errorCode, result.getEntryMatchingSeverity(

+	                    RefactoringStatus.WARNING).getCode());

+	        }

+        }

+    }	

+

+    private ICompilationUnit[] createCUs(String[] qualifiedNames)

+    	throws Exception

+    {

+        ICompilationUnit[] cus = new ICompilationUnit[qualifiedNames.length];

+

+        for (int idx = 0; idx < qualifiedNames.length; idx++)

+        {

+            Assert.isNotNull(qualifiedNames[idx]);

+            cus[idx] = createCUfromTestFile(getRoot().createPackageFragment(

+                    	getQualifier(qualifiedNames[idx]), true, null),

+                    	getSimpleName(qualifiedNames[idx]));

+        }

+        return cus;

+    }

+

+    private String getQualifier(String qualifiedName)

+    {

+        int dot = qualifiedName.lastIndexOf('.');

+        return qualifiedName.substring(0, dot != -1 ? dot : 0);

+    }

+

+    private String getSimpleName(String qualifiedName)

+    {

+        return qualifiedName.substring(qualifiedName.lastIndexOf('.') + 1);

+    }

+

+    private static IMethod getMethod(ICompilationUnit cu,

+            ISourceRange sourceRange) throws JavaModelException

+    {

+        IJavaElement[] jes = cu.codeSelect(sourceRange.getOffset(), sourceRange

+                .getLength());

+        if (jes.length != 1 || !(jes[0] instanceof IMethod))

+            return null;

+        return (IMethod)jes[0];

+    }

+

+    private static void chooseNewReceiver(

+            MoveInstanceMethodProcessor refProc, int newReceiverType,

+            String newReceiverName)

+    {

+        IVariableBinding chosen = null;

+        IVariableBinding[] possibleNewReceivers = refProc.getPossibleTargets();

+        for (int i = 0; i < possibleNewReceivers.length; i++)

+        {

+            IVariableBinding candidate = possibleNewReceivers[i];

+            if (candidate.getName().equals(newReceiverName)

+                    && typeMatches(newReceiverType, candidate))

+            {

+                assertNull(chosen);

+                chosen = candidate;

+            }

+        }

+        assertNotNull("Expected new receiver not available.", chosen);

+        refProc.setTarget(chosen);

+    }

+

+    private static boolean typeMatches(int newReceiverType,

+            IVariableBinding newReceiver)

+    {

+        return newReceiverType == PARAMETER && newReceiver.isParameter()

+                || newReceiverType == FIELD && newReceiver.isField();

+    }

+

+    /********** tests *********/

+// test method template    

+//  public void test0() throws Exception

+//  {

+//      helper1(new String[] { "p1.A", "p2.B", "p3.C" }, "p1.A", 7, 17, 7, 20,

+//              PARAMETER, "b", false, false);

+//  }

+//	public void testFail0() throws Exception

+//	{

+//		failHelper1("p1.IA", 5, 17, 5, 20, PARAMETER, "b", true, true, RefactoringStatusCodes.SELECT_METHOD_IMPLEMENTATION);	

+//	}

+

+    // TODO(SH): more tests for combinations of inline,removeDelegate!

+    

+    /* Testing receiver types */

+    // TODO: commented passing tests

+	// public void testFieldNewReceiver() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.A", "p.B"}, "p.A",

+	// 7, 17, 7, 19, FIELD, "b", true, true, true);// warn:

+	// change-field-to-default-vis

+	// }

+	//    

+	// public void testParameterNewReceiver() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.A", "p.B"}, "p.A",

+	// 5, 17, 5, 19, PARAMETER, "b", true, true, false);

+	// }

+	//

+	// /* Testing team classes */

+	// public void testTeamclass1() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 7, 17, 7, 20, FIELD, "_t", true, true, true);// warn:

+	// change-field-to-default-vis

+	// }

+	//    

+	// public void testTeamclass2() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 5, 17, 5, 20, PARAMETER, "t", false, false, false);

+	// }

+	//    

+	// /* Testing role classes */

+	// public void testRoleclass1() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 8, 17, 8, 20, FIELD, "_r", true, false, false);

+	// }

+	//

+	// public void testRoleclass2() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 7, 17, 7, 20, PARAMETER, "r", true, false, false);

+	// }

+	//

+	// /* Testing nested teams */

+	// public void testNestedTeam1() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 8, 17, 8, 20, FIELD, "_nT", true, false, false);

+	// }

+	//    

+	// public void testNestedTeam2() throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.T", "p.O"}, "p.O",

+	// 7, 17, 7, 20, PARAMETER, "nT", true, false, false);

+	// }

+	//

+	// /* Testing role files */

+	// //TODO(gbr) implement tests for role files

+	// // public void testRoleFile1() throws Exception

+	// // {

+	// // }

+	// //

+	// // public void testRoleFile2() throws Exception

+	// // {

+	// // }

+	//    

+	// public void testRoleClassWithLongMethodSpecsInCallinBinding()

+	// throws Exception

+	// {

+	// performConditionChecking_warnings(

+	// new String[] {"p.O", "p.S", "p.B", "p.T"}, "p.O",

+	// 8, 17, 8, 18, FIELD, "_s", null, true, true,

+	// // FIXME(SH):

+	// //OTRefactoringStatusCodes.OVERLOADING

+	// -1

+	// );

+	// }

+	//

+	// public void testRoleClassWithLongMethodSpecsInCalloutBinding()

+	// throws Exception

+	// {

+	// performConditionChecking_warnings(

+	// new String[] {"p.O", "p.S", "p.B", "p.T"}, "p.O",

+	// 8, 17, 8, 18, FIELD, "_s", null, true, true,

+	// // FIXME(SH):

+	// //OTRefactoringStatusCodes.OVERLOADING

+	// -1

+	// );

+	// }

+	//

+	// public void testExplicitlyInheritedRoleClassWithLongMethodSpecs()

+	// throws Exception

+	// {

+	// performConditionChecking_warnings(

+	// new String[] {"p.O", "p.S", "p.B", "p.T"}, "p.O",

+	// 8, 17, 8, 18, FIELD, "_s", null, true, true,

+	// //FIXME(SH):

+	// //OTRefactoringStatusCodes.OVERLOADING

+	// -1

+	// );

+	// }

+	// public void testImplicitlyInheritedRoleClassWithLongMethodSpecs()

+	// throws Exception

+	// {

+	// performConditionChecking_warnings(

+	// new String[] {"p.O", "p.S", "p.B", "p.T1", "p.T2"}, "p.O",

+	// 8, 17, 8, 18, FIELD, "_s", null, true, true,

+	// // FIXME(SH):

+	// //OTRefactoringStatusCodes.OVERLOADING

+	// -1

+	// );

+	// }

+	// public void testTargetMethodAccessesPrivateFeatureOfEnclosingType1()

+	// throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.A", "p.B", "p.C"},

+	// "p.A", 8, 17, 8, 19, FIELD, "_c",

+	// true, true, true);//warn: move needs to open visibility of field

+	// }

+	// public void testTargetMethodAccessesPrivateFeatureOfEnclosingType2()

+	// throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p.A", "p.B", "p.C"},

+	// "p.A", 7, 17, 7, 19, PARAMETER, "c",

+	// true, true, true);//warn: move needs to open visibility of field

+	// }

+	// public void testTargetMethodAccessesProtectedFeatureOfEnclosingType1()

+	// throws Exception

+//    {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p1.A", "p1.B", "p2.C"},

+	// "p1.A", 10, 17, 10, 19, FIELD, "_c",

+	// true, true, true);//warn: move needs to open visibility of field

+//    }

+	// public void testTargetMethodAccessesProtectedFeatureOfEnclosingType2()

+	// throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p1.A", "p1.B", "p2.C"},

+	// "p1.A", 9, 17, 9, 19, PARAMETER, "c",

+	// true, true, true);//warn: move needs to open visibility of field

+	// }

+//    

+	// public void

+	// testTargetMethodAccessesPackageVisibleFeatureOfEnclosingType1()

+	// throws Exception

+//    {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p1.A", "p1.B", "p2.C"},

+	// "p1.A", 10, 17, 10, 19, FIELD, "_c",

+	// true, true, true);//warn: move needs to open visibility of field

+	// }

+	// public void

+	// testTargetMethodAccessesPackageVisibleFeatureOfEnclosingType2()

+	// throws Exception

+	// {

+	// performAndCheckSelectedCU_passing(

+	// new String[] {"p1.A", "p1.B", "p2.C"},

+	// "p1.A", 9, 17, 9, 19, PARAMETER, "c",

+	// true, true, true);//warn: move needs to open visibility of field

+	// }

+    //tests for ambiguity in method specs

+	public void testAmbiguousRoleMethodSpecifierInCallinBinding1()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.B", "p.T"},

+                "p.O", 8, 17, 8, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+    }

+    public void testAmbiguousRoleMethodSpecifierInCallinBinding2()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.T"},

+                "p.O", 5, 17, 5, 18, PARAMETER, "s",

+                true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+    }

+    public void _testAmbiguousBaseMethodSpecifierInCallinBinding1()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.B", "p.T"},

+                "p.O", 8, 17, 8, 18, FIELD, "_s",

+                false, false,

+				OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+    }

+    public void testAmbiguousBaseMethodSpecifierInCallinBinding2()

+		throws Exception

+	{

+	    performAndCheckSelectedCU_failing(

+	            new String[] {"p.O", "p.S", "p.T"},

+	            "p.O", 5, 17, 5, 18, PARAMETER, "s",

+	            true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+	}

+    public void testAmbiguousRoleMethodSpecifierInCalloutBinding1()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.B", "p.T"},

+                "p.O", 8, 17, 8, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+    }

+    public void testAmbiguousRoleMethodSpecifierInCalloutBinding2()

+    	throws Exception

+	{

+	    performAndCheckSelectedCU_failing(

+	            new String[] {"p.O", "p.S", "p.T"},

+	            "p.O", 5, 17, 5, 18, PARAMETER, "s",

+	            true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+	}

+    public void _testAmbiguousBaseMethodSpecifierInCalloutBinding1()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.B", "p.T"},

+                "p.O", 8, 17, 8, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+    }

+    public void testAmbiguousBaseMethodSpecifierInCalloutBinding2()

+		throws Exception

+	{

+	    performAndCheckSelectedCU_failing(

+	            new String[] {"p.O", "p.S", "p.T"},

+	            "p.O", 5, 17, 5, 18, PARAMETER, "s",

+	            false, false,

+				OTRefactoringStatusCodes.AMBIGUOUS_METHOD_SPECIFIER);

+	}

+    //tests for overriding

+    public void _testMovedMethodIsOverriddenInBaseClass()

+		throws Exception

+	{

+        performAndCheckSelectedCU_failing(

+	            new String[] {"p.O", "p.S", "p.T"},

+	            "p.O", 7, 17, 7, 18, FIELD, "_s",

+	            true, true, OTRefactoringStatusCodes.BASE_METHOD_OVERRIDES_MOVED_METHOD);

+	}

+    public void _testMovedMethodIsOverriddenInRoleClass()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.T"},

+                "p.O", 7, 17, 7, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.ROLE_METHOD_OVERRIDES_MOVED_METHOD);

+    }

+    public void _testMovedMethodIsOverriddenInExplicitlyInheritedRoleClass()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.T"},

+                "p.O", 7, 17, 7, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.ROLE_METHOD_OVERRIDES_MOVED_METHOD);

+    }

+    public void _testMovedMethodIsOverriddenInImplicitlyInheritedRoleClass()

+    	throws Exception

+	{

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.T1", "p.T2"},

+                "p.O", 7, 17, 7, 18, FIELD, "_s",

+                true, true, OTRefactoringStatusCodes.ROLE_METHOD_OVERRIDES_MOVED_METHOD);

+	}

+    //tests for duplication

+    public void testDuplicateMethodInNewReceiver()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S"},

+                "p.O", 7, 17, 7, 17, FIELD, "_s",

+                true, true, -1);

+    }

+    public void testDuplicateMethodInBaseClassReceiver()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.O", "p.S", "p.T"},

+                "p.O", 7, 17, 7, 17, FIELD, "_s",

+                true, true, -1);

+    }

+

+    public void _testDuplicateMethodInNewParameterReceiver1()

+    throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.A", "p.B"},

+                "p.A", 6, 17, 6, 18, PARAMETER, "b",

+                true, true, OTRefactoringStatusCodes.DUPLICATE_METHOD_IN_NEW_RECEIVER);

+    }

+    

+    public void _testDuplicateMethodInNewParameterReceiver2()

+    throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.A", "p.B"},

+                "p.A", 8, 17, 8, 18, PARAMETER, "b",

+                true, true, OTRefactoringStatusCodes.DUPLICATE_METHOD_IN_NEW_RECEIVER);

+    }

+    

+    public void _testTargetMethodIsPrivate()

+    	throws Exception

+    {

+        performAndCheckSelectedCU_failing(

+                new String[] {"p.A", "p.B"},

+                "p.A", 6, 18, 6, 20, PARAMETER, "b",

+                true, true, OTRefactoringStatusCodes.CANNOT_MOVE_PRIVATE);

+    }

+    

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveMethodTests.java
new file mode 100644
index 0000000..849a565
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveMethodTests.java
@@ -0,0 +1,41 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.move;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ *

+ */

+public class MoveMethodTests

+{

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(MoveMethodTests.class.getName());

+        

+        suite.addTest(MoveInstanceMethodTests.suite());

+        suite.addTest(MoveStaticMethodTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveStaticMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveStaticMethodTests.java
new file mode 100644
index 0000000..d648a18
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/move/MoveStaticMethodTests.java
@@ -0,0 +1,563 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.move;

+

+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.IJavaProject;

+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.core.JavaModelException;

+import org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor;

+import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;

+

+/**

+ * Part of the tests in this class have been copied from the original class

+ * <code>MoveMembersTests</code> in the test suite

+ *<code>org.eclipse.jdt.ui.tests.refactoring</code> provided by Eclipse.

+ *

+ * @author brcan

+ *  

+ */

+public class MoveStaticMethodTests extends RefactoringTest

+{

+    private static final String REFACTORING_PATH = "MoveStaticMethod/";

+

+    public MoveStaticMethodTests(String name)

+    {

+        super(name);

+    }

+

+    public static Test suite()

+    {

+        return new MySetup(new TestSuite(MoveStaticMethodTests.class));

+    }

+

+    public static Test setUpTest(Test someTest)

+    {

+        return new MySetup(someTest);

+    }

+

+    protected String getRefactoringPath()

+    {

+        return REFACTORING_PATH;

+    }

+

+    private static MoveRefactoring createRefactoring(IMember[] members, IType destination)

+    	throws JavaModelException

+    {

+        return createRefactoring(destination.getJavaProject(), members, destination.getFullyQualifiedName('.'));

+    }

+

+    private static MoveRefactoring createRefactoring(IJavaProject project, IMember[] members, String destination)

+    	throws JavaModelException

+    {

+        MoveStaticMembersProcessor processor = new MoveStaticMembersProcessor(

+                members, JavaPreferencesSettings.getCodeGenerationSettings(project));

+        if (processor == null)

+        {

+            return null;

+        }

+        processor.setDestinationTypeFullyQualifiedName(destination);

+

+        return new MoveRefactoring(processor);

+    }

+

+    //helper methods for passing tests

+    private void methodHelper_passing(

+            String[] methodNames,

+            String[][] signatures,

+            String srcCuName,

+            String destCuName) throws Exception

+    {

+        fieldMethodTypeHelper_passing(

+                new String[0], methodNames, signatures, new String[0], srcCuName, destCuName);

+    }

+

+    private void fieldMethodTypeHelper_passing(

+            String[] fieldNames,

+            String[] methodNames,

+            String[][] signatures,

+            String[] typeNames,

+            String srcCuName,

+            String destCuName) throws Exception

+    {

+        IPackageFragment packForSrc = getPackageP();

+        IPackageFragment packForDest = getPackageP();

+        fieldMethodTypePackageHelper_passing(

+                fieldNames, methodNames, signatures, typeNames, packForSrc, packForDest, srcCuName, destCuName);

+    }

+

+    private void fieldMethodTypePackageHelper_passing(

+            String[] fieldNames,

+            String[] methodNames,

+            String[][] signatures,

+            String[] typeNames,

+            IPackageFragment packForSrc,

+            IPackageFragment packForDest,

+            String srcCuName,

+            String destTypeName) throws Exception

+    {

+    	String[] destNames= destTypeName.split("[$]");

+    	String destCUName = destNames[0];

+        //ParticipantTesting.reset();

+        ICompilationUnit srcCU = createCUfromTestFile(packForSrc, srcCuName);

+		ICompilationUnit destCU = createCUfromTestFile(packForDest, destCUName);

+        IType srcType = getType(srcCU, srcCuName);

+        IType destType = getType(destCU, destCUName);

+        for (int i=1; i<destNames.length; i++)

+        	destType= destType.getType(destNames[i]);

+        IField[] fields = getFields(srcType, fieldNames);

+        IMethod[] methods = getMethods(srcType, methodNames, signatures);

+        IType[] types = getMemberTypes(srcType, typeNames);

+

+        IType destinationType = destType;

+        IMember[] members = merge(methods, fields, types);

+        // FIXME(SH): is this needed (was doubly commented)?

+        //String[] handles= ParticipantTesting.createHandles(members);

+        //MoveArguments[] args= new MoveArguments[handles.length];

+        //for (int i = 0; i < args.length; i++) {

+        //	args[i]= new MoveArguments(destinationType, true);

+        //}

+        MoveRefactoring ref = createRefactoring(members, destinationType);

+

+        RefactoringStatus result = performRefactoringWithStatus(ref);

+        assertTrue("precondition was supposed to pass",

+                result.getSeverity() <= RefactoringStatus.WARNING);

+        //ParticipantTesting.testMove(handles, args);

+

+        String expected;

+        String actual;

+

+        expected = getFileContents(getOutputTestFileName(srcCuName));

+        actual = srcCU.getSource();

+        assertEqualLines("incorrect modification of " + srcCuName, expected, actual);

+

+        expected = getFileContents(getOutputTestFileName(destCUName));

+        actual = destCU.getSource();

+        assertEqualLines("incorrect modification of " + destTypeName, expected, actual);

+    }

+

+    //helper methods for failing tests

+    private void fieldMethodTypeHelper_failing(

+            String[] fieldNames,

+            String[] methodNames,

+            String[][] signatures,

+            String[] typeNames,

+            int errorLevel,

+            String destinationTypeName) throws Exception

+    {

+        IPackageFragment packForA = getPackageP();

+        IPackageFragment packForB = getPackageP();

+        fieldMethodTypePackageHelper_failing(

+                fieldNames, methodNames, signatures, typeNames, errorLevel, destinationTypeName, packForA, packForB);

+    }

+

+    private void fieldMethodTypePackageHelper_failing(

+            String[] fieldNames,

+            String[] methodNames,

+            String[][] signatures,

+            String[] typeNames,

+            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 = getFields(typeA, fieldNames);

+            IMethod[] methods = getMethods(typeA, methodNames, signatures);

+            IType[] types = getMemberTypes(typeA, typeNames);

+

+            MoveRefactoring ref = createRefactoring(

+                    typeA.getJavaProject(), merge(methods, fields, types), destinationTypeName);

+            if (ref == null)

+            {

+                assertEquals(errorLevel, RefactoringStatus.FATAL);

+                return;

+            }

+            RefactoringStatus result = performRefactoring(ref);

+            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);

+        }

+    }

+    

+    /********** tests *********/

+	public void test0() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test1() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test2() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test3() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test4() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test9() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test10() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test11() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test12() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test13() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test14() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test15() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test16() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test17() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test18() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test19() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test20() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test28() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m", "n" },

+                new String[][] { new String[0], new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test29() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void test41() throws Exception

+    {

+        methodHelper_passing(

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                "A",

+                "B");

+    }

+

+    public void testFail0() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.FATAL,

+                "p.B");

+    }

+

+    public void testFail1() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.ERROR,

+                "p.B.X");

+    }

+

+    public void testFail2() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.ERROR,

+                "p.B");

+    }

+

+    public void testFail3() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[] { "I", "I" } },

+                new String[0],

+                RefactoringStatus.ERROR,

+                "p.B");

+    }

+

+    public void testFail4() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[] { "I", "I" } },

+                new String[0],

+                RefactoringStatus.WARNING,

+                "p.B");

+    }

+

+    public void testFail5() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[] { "I", "I" } },

+                new String[0],

+                RefactoringStatus.WARNING,

+                "p.B");

+    }

+

+    public void testFail9() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.WARNING, // visibility adjustment

+                "p.B");

+    }

+

+    public void testFail10() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.WARNING, // visibility adjustment

+                "p.B");

+    }

+

+    public void testFail13() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.WARNING, // visibility adjustment

+                "p.B");

+    }

+

+    public void testFail15() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.WARNING,

+                "p.B");

+    }

+

+    public void testFail17() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.FATAL,

+                "java.lang.Object");

+    }

+

+    public void testFail18() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.FATAL,

+                "p.DontExist");

+    }

+

+    public void testFail19() throws Exception

+    {

+        fieldMethodTypeHelper_failing(

+                new String[0],

+                new String[] { "m" },

+                new String[][] { new String[0] },

+                new String[0],

+                RefactoringStatus.ERROR,

+                "p.B");

+    }

+    

+    public void testMoveToTeamclass() throws Exception

+    {

+        methodHelper_passing(new String[] { "m" }, new String[][] { new String[0] }, "B", "T");

+    }

+

+    public void testMoveToNestedTeamclass1() throws Exception

+    {

+        methodHelper_passing(new String[] { "m" }, new String[][] { new String[0] }, "B", "T");

+    }

+    public void testMoveToNestedTeamclass2() throws Exception

+    {

+        methodHelper_passing(new String[] { "m" }, new String[][] { new String[0] }, "B", "T$TR");

+    }

+    public void testMoveToRoleclass() throws Exception

+    {

+        methodHelper_passing(new String[] { "m" }, new String[][] { new String[0] }, "B", "T$R");

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/AllTests.java
new file mode 100644
index 0000000..f594bee
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/AllTests.java
@@ -0,0 +1,50 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.pullup;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author jogeb

+ * 

+ *         Runs all OT-specific refactoring tests and corresponding eclipse

+ *         refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-PullUp-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.pullup.PullUpTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/PullUpTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/PullUpTests.java
new file mode 100644
index 0000000..ff621e2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pullup/PullUpTests.java
@@ -0,0 +1,330 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.pullup;
+
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+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.IJavaProject;
+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.refactoring.RefactoringAvailabilityTester;
+import org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor;
+import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
+import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
+import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * Example TestCase to practice testing for the diploma thesis.
+ * 
+ * @author Johannes Gebauer
+ */
+public class PullUpTests extends RefactoringTest {
+	private static final String REFACTORING_PATH = "PullUp/";
+
+	public PullUpTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new MySetup(new TestSuite(PullUpTests.class));
+	}
+
+	public static Test setUpTest(Test test) {
+		return new MySetup(test);
+	}
+
+	protected String getRefactoringPath() {
+		return REFACTORING_PATH;
+	}
+
+	private ICompilationUnit[] createCUs(String[] cuNames) throws Exception {
+		ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+		for (int idx = 0; idx < cuNames.length; idx++) {
+			Assert.isNotNull(cuNames[idx]);
+			cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+		}
+		return cus;
+	}
+
+	private String createInputTestFileName(ICompilationUnit[] cus, int idx) {
+		return getInputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+	}
+
+	private String createOutputTestFileName(ICompilationUnit[] cus, int idx) {
+		return getOutputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+	}
+
+	private String getSimpleNameOfCu(String compUnit) {
+		int dot = compUnit.lastIndexOf('.');
+		return compUnit.substring(0, dot);
+	}
+
+	private void setTargetClass(PullUpRefactoringProcessor processor, int targetClassIndex) throws JavaModelException {
+		IType[] possibleClasses = getPossibleTargetClasses(processor);
+		processor.setDestinationType(getPossibleTargetClasses(processor)[possibleClasses.length - 1 - targetClassIndex]);
+	}
+
+	private IType[] getPossibleTargetClasses(PullUpRefactoringProcessor processor) throws JavaModelException {
+		return processor.getCandidateTypes(new RefactoringStatus(), new NullProgressMonitor());
+	}
+
+	private static IMethod[] getMethods(IMember[] members) {
+		List l = Arrays.asList(JavaElementUtil.getElementsOfType(members, IJavaElement.METHOD));
+		return (IMethod[]) l.toArray(new IMethod[l.size()]);
+	}
+
+	private static PullUpRefactoringProcessor createRefactoringProcessor(IMember[] methods) throws JavaModelException {
+		IJavaProject project = null;
+		if (methods != null && methods.length > 0)
+			project = methods[0].getJavaProject();
+		if (RefactoringAvailabilityTester.isPullUpAvailable(methods)) {
+			PullUpRefactoringProcessor processor = new PullUpRefactoringProcessor(methods, JavaPreferencesSettings.getCodeGenerationSettings(project));
+			new ProcessorBasedRefactoring(processor);
+			return processor;
+		}
+		return null;
+	}
+
+	/**
+	 * The <code>ICompilationUnit</code> containing the declaring type must be
+	 * at position 0.
+	 * 
+	 * @param fieldNames
+	 *            TODO
+	 */
+	private void performPullUp_pass(String[] cuNames, String[] methodNames, String[][] signatures, String[] fieldNames, boolean deleteAllInSourceType,
+			boolean deleteAllMatchingMethods, int targetClassIndex, String nameOfDeclaringType) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType declaringType = getType(cus[0], nameOfDeclaringType);
+			IMethod[] methods = getMethods(declaringType, methodNames, signatures);
+			IField[] fields = getFields(declaringType, fieldNames);
+			IMember[] members = merge(methods, fields);
+
+			PullUpRefactoringProcessor processor = createRefactoringProcessor(members);
+			Refactoring ref = processor.getRefactoring();
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+
+			setTargetClass(processor, targetClassIndex);
+
+			if (deleteAllInSourceType)
+				processor.setDeletedMethods(methods);
+			if (deleteAllMatchingMethods)
+				processor.setDeletedMethods(getMethods(processor.getMatchingElements(new NullProgressMonitor(), false)));
+
+			RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor());
+			assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+			performChange(ref, false);
+
+			for (int i = 0; i < cus.length; i++) {
+				String expected = getFileContents(getOutputTestFileName(cuNames[i]));
+				String actual = cus[i].getSource();
+				assertEqualLines(expected, actual);
+			}
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+
+	/**
+	 * The <code>ICompilationUnit</code> containing the declaring type must be
+	 * at position 0.
+	 */
+	private void performPullUp_warning(String[] cuNames, String[] methodNames, String[][] signatures, boolean deleteAllInSourceType,
+			boolean deleteAllMatchingMethods, int targetClassIndex, String nameOfDeclaringType) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType declaringType = getType(cus[0], nameOfDeclaringType);
+			IMethod[] methods = getMethods(declaringType, methodNames, signatures);
+
+			PullUpRefactoringProcessor processor = createRefactoringProcessor(methods);
+			Refactoring ref = processor.getRefactoring();
+
+			
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+			
+			setTargetClass(processor, targetClassIndex);
+
+			if (deleteAllInSourceType)
+				processor.setDeletedMethods(methods);
+			if (deleteAllMatchingMethods)
+				processor.setDeletedMethods(getMethods(processor.getMatchingElements(new NullProgressMonitor(), false)));
+
+			RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor());
+			RefactoringStatusEntry[] initialConditionStatus = checkInputResult.getEntries();
+			assertEquals("precondition was supposed to give a warning", RefactoringStatus.WARNING, initialConditionStatus[0].getSeverity());
+			assertEquals("precondition was supposed to give only one warning", initialConditionStatus.length, 1);
+
+			performChange(ref, false);
+
+			for (int i = 0; i < cus.length; i++) {
+				String expected = getFileContents(getOutputTestFileName(cuNames[i]));
+				String actual = cus[i].getSource();
+				assertEqualLines(expected, actual);
+			}
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+	
+	private void performPullUp_failing(String[] cuNames, String[] methodNames, String[][] signatures, String[] fieldNames, boolean deleteAllInSourceType,
+			boolean deleteAllMatchingMethods, int targetClassIndex, String nameOfDeclaringType) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType declaringType = getType(cus[0], nameOfDeclaringType);
+			IMethod[] methods = getMethods(declaringType, methodNames, signatures);
+			IField[] fields = getFields(declaringType, fieldNames);
+			IMember[] members = merge(methods, fields);
+
+			PullUpRefactoringProcessor processor = createRefactoringProcessor(members);
+			Refactoring ref = processor.getRefactoring();
+
+			setTargetClass(processor, targetClassIndex);
+
+			if (deleteAllInSourceType)
+				processor.setDeletedMethods(methods);
+			if (deleteAllMatchingMethods)
+				processor.setDeletedMethods(getMethods(processor.getMatchingElements(new NullProgressMonitor(), false)));
+
+			RefactoringStatus result = performRefactoring(ref);
+			assertNotNull("precondition was supposed to fail.", result);
+            assertTrue("precondition was supposed to fail.", !result.isOK());
+			assertNotNull("precondition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR));
+
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+
+	/******* tests ******************/
+
+	/* Pull up Method Tests */
+	
+	public void testPullUpBoundMethod() throws Exception {
+		performPullUp_warning(new String[] { "B", "BSuper", "T" }, new String[] { "bm" }, new String[][] { new String[0] }, true, false, 0, "B");
+	}
+
+	public void testPullUpCallinMethod() throws Exception {
+		performPullUp_pass(new String[] { "T", "TSuper", "B" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "R");
+	}
+
+	public void testPullUpMethodToImplicitSuperclass() throws Exception {
+		performPullUp_pass(new String[] { "T", "TSuper", "B" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "R");
+	}
+
+	public void testDeletionOfMatchingMethods() throws Exception {
+		performPullUp_pass(new String[] { "T", "T2", "TSuper", "B" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, true, true, 0,
+				"R");
+	}
+
+	public void testReferencingRoleInDeclaredLifting() throws Exception {
+		performPullUp_failing(new String[] { "T", "TSuper", "B" }, new String[] { "m" }, new String[][] { new String[] { "QB;" } }, new String[] {}, true,
+				false, 0, "T");
+	}
+
+	public void testPulledUpMethodIsOverriddenInImplicitSubRole() throws Exception {
+		performPullUp_failing(new String[] { "T1", "T2", "TSuper", }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false, 0,
+				"R");
+	}
+
+	public void testAmbiguityInExplicitRelatedRole1() throws Exception {
+		performPullUp_failing(new String[] { "T", "B" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "R1");
+	}
+
+	public void testAmbiguityInExplicitRelatedRole2() throws Exception {
+		performPullUp_failing(new String[] { "T", "B" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "R1");
+	}
+
+	public void testAmbiguityInImplicitRelatedRole1() throws Exception {
+		performPullUp_failing(new String[] { "T1", "T2", "TSuper", "B" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false,
+				0, "R");
+	}
+
+	public void testAmbiguityInImplicitRelatedRole2() throws Exception {
+		performPullUp_failing(new String[] { "T1", "T2", "TSuper", "B" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false,
+				0, "R");
+	}
+
+	public void testAmbiguityInBase1() throws Exception {
+		performPullUp_failing(new String[] { "B2", "B1", "T" }, new String[] { "bm" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "B2");
+	}
+
+	public void testAmbiguityInBase2() throws Exception {
+		performPullUp_failing(new String[] { "B2", "B1", "T" }, new String[] { "bm" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "B2");
+	}
+
+	public void testPullUpCallinIntoRegularClass() throws Exception {
+		performPullUp_failing(new String[] { "T", "C" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, true, false, 0, "R");
+	}
+
+	/* Pull up Field Tests */
+	
+	public void testPullUpAnchoredTypeField() throws Exception {
+		performPullUp_failing(new String[] { "T2", "T1", "T3" }, new String[] {}, new String[][] { new String[0] }, new String[] { "extern" }, true, false, 0,
+				"T2");
+	}
+	
+	public void testPulledUpFieldWillBeShadowed() throws Exception {
+		performPullUp_failing(new String[] { "T2", "T1", "T3" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, true, false, 0,
+				"Role");
+	}
+	
+	public void testPullUpCalloutFieldInBase() throws Exception {
+		performPullUp_pass(new String[] { "B1", "B2", "T" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, true, false, 0, "B1");
+	}
+	
+	public void testPullUpFieldToImplicitSuperclass() throws Exception {
+		performPullUp_pass(new String[] { "T", "TSuper" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, true, false, 0, "R");
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/AllTests.java
new file mode 100644
index 0000000..59dea91
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/AllTests.java
@@ -0,0 +1,46 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.pushdown;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author jogeb

+ * 

+ *         Runs all OT-specific refactoring tests and corresponding eclipse

+ *         refactoring tests

+ */

+public class AllTests {

+

+	public static void main(String[] args) {

+		junit.textui.TestRunner.run(AllTests.suite());

+	}

+

+	public static Test suite() {

+		TestSuite suite = new TestSuite("All OT-PushDown-Refactoring Tests");

+

+		suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.pushdown.PushDownTests.suite());

+

+		return suite;

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/PushDownTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/PushDownTests.java
new file mode 100644
index 0000000..ff7ab3e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/pushdown/PushDownTests.java
@@ -0,0 +1,265 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.pushdown;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaProject;
+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.refactoring.RefactoringAvailabilityTester;
+import org.eclipse.jdt.internal.corext.refactoring.structure.PushDownRefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * Copy of {@link org.eclipse.jdt.ui.tests.refactoring.PushDownTests}.
+ * 
+ * @author Johannes Gebauer
+ * 
+ */
+public class PushDownTests extends RefactoringTest {
+
+	private static final Class clazz= PushDownTests.class;
+	
+	private static final String REFACTORING_PATH= "PushDown/";
+
+	public PushDownTests(String name) {
+		super(name);
+	}
+	
+	protected String getRefactoringPath() {
+		return REFACTORING_PATH;
+	}
+	
+
+	public static Test suite() {
+		return new MySetup(new TestSuite(PushDownTests.class));
+	}
+
+	private void performPullUp_pass(String[] cuNames, String[] methodNames, String[][] signatures, String[] fieldNames, String nameOfDeclaringType)
+			throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType declaringType = getType(cus[0], nameOfDeclaringType);
+			IMethod[] methods = getMethods(declaringType, methodNames, signatures);
+			IField[] fields = getFields(declaringType, fieldNames);
+			IMember[] members = merge(methods, fields);
+
+			PushDownRefactoringProcessor processor = createRefactoringProcessor(members);
+			Refactoring ref = processor.getRefactoring();
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+
+			RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor());
+			assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+			performChange(ref, false);
+
+			for (int i = 0; i < cus.length; i++) {
+				String expected = getFileContents(getOutputTestFileName(cuNames[i]));
+				String actual = cus[i].getSource();
+				assertEqualLines(expected, actual);
+			}
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+	
+	private void performPullUp_fail(String[] cuNames, String[] methodNames, String[][] signatures, String[] fieldNames, String nameOfDeclaringType)
+			throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		try {
+
+			IType declaringType = getType(cus[0], nameOfDeclaringType);
+			IMethod[] methods = getMethods(declaringType, methodNames, signatures);
+			IField[] fields = getFields(declaringType, fieldNames);
+			IMember[] members = merge(methods, fields);
+
+			PushDownRefactoringProcessor processor = createRefactoringProcessor(members);
+			Refactoring ref = processor.getRefactoring();
+
+			assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+			
+			RefactoringStatus result = performRefactoring(ref);
+			assertNotNull("precondition was supposed to fail.", result);
+			assertTrue("precondition was supposed to fail.", !result.isOK());
+			assertNotNull("precondition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR));
+
+		} finally {
+			performDummySearch();
+			for (int i = 0; i < cus.length; i++) {
+				cus[i].delete(false, null);
+			}
+
+		}
+	}
+	
+	private static PushDownRefactoringProcessor createRefactoringProcessor(IMember[] methods) throws JavaModelException {
+		IJavaProject project = null;
+		if (methods != null && methods.length > 0)
+			project = methods[0].getJavaProject();
+		if (RefactoringAvailabilityTester.isPullUpAvailable(methods)) {
+			PushDownRefactoringProcessor processor = new PushDownRefactoringProcessor(methods);
+			new ProcessorBasedRefactoring(processor);
+			return processor;
+		}
+		return null;
+	}
+	
+	private ICompilationUnit[] createCUs(String[] cuNames) throws Exception {
+		ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+		for (int idx = 0; idx < cuNames.length; idx++) {
+			Assert.isNotNull(cuNames[idx]);
+			cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+		}
+		return cus;
+	}
+	
+	
+	//--------------------------------------------------------
+	public void testPushDownMethodToImplicitSubclass() throws Exception {
+		performPullUp_pass(new String[] { "TSuper", "T", "B" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, "R");
+	}
+	
+	public void testDeclaringTypeHasADirectPhantomSubRole() throws Exception {
+		performPullUp_fail(new String[] { "TSuper", "T1", "T2" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, "R");
+	}
+	
+	public void testPushedDownMethodReferencedInMethodBinding1() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] { "bm" }, new String[][] { new String[0] }, new String[] {}, "B1");
+	}
+	
+	public void testPushedDownMethodReferencedInMethodBinding2() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] { "bm" }, new String[][] { new String[0] }, new String[] {}, "B1");
+	}
+	
+	public void testPushedDownMethodReferencedInMethodBinding3() throws Exception {
+		performPullUp_fail(new String[] { "T1", "T2", "B" }, new String[] { "rm" }, new String[][] { new String[0] }, new String[] {}, "Role");
+	}	
+	
+	public void testPushedDownMethodIsReferencedInRegularGuard1() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] { "b" }, new String[][] { new String[0] }, new String[] {}, "R1");
+	}	
+	
+	public void testPushedDownMethodIsReferencedInRegularGuard2() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] { "b" }, new String[][] { new String[0] }, new String[] {}, "R1");
+	}	
+	
+	public void testPushedDownMethodIsReferencedInBaseGuard1() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] { "b" }, new String[][] { new String[0] }, new String[] {}, "B1");
+	}
+	
+	public void testPushedDownMethodIsReferencedInBaseGuard2() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] { "b" }, new String[][] { new String[0] }, new String[] {}, "B1");
+	}
+
+	public void testPushedDownMethodIsReferencedInBaseGuard3() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] { "b" }, new String[][] { new String[0] }, new String[] {}, "B1");
+	}
+	
+	public void testPushedDownMethodIsReferencedInParameterMapping1() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] { "f" }, new String[][] { new String[0] }, new String[] {}, "R1");
+	}
+
+	public void testPushedDownMethodIsReferencedInParameterMapping2() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] { "f" }, new String[][] { new String[0] }, new String[] {}, "R1");
+	}
+
+	// See Ticket #286
+	public void _testPushedDownMethodIsReferencedInParameterMapping3() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] { "f" }, new String[][] { new String[0] }, new String[] {}, "R1");
+	}
+	
+	/* Push Down Field Tests */
+	public void testPushDownFieldToImplicitSubclass() throws Exception {
+		performPullUp_pass(new String[] { "TSuper", "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "R");
+	}
+	
+	public void testPushedDownFieldReferencedInCalloutToField() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "B1");
+	}
+	
+	public void testPushDownTypeAnchorInstance() throws Exception {
+		performPullUp_fail(new String[] { "T1", "T2", "T3" }, new String[] {}, new String[][] { new String[0] }, new String[] { "anchor" }, "T1");
+	}
+	
+	public void testPushedDownFieldWouldShadowAnInheritedField() throws Exception {
+		performPullUp_fail(new String[] { "B", "T1", "T2" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "B");
+	}
+	
+	public void testPushedDownFieldIsReferencedInRegularGuard1() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "b" }, "R1");
+	}
+
+	public void testPushedDownFieldIsReferencedInRegularGuard2() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "b" }, "R1");
+	}
+
+	public void testPushedDownFieldIsReferencedInBaseGuard1() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] {}, new String[][] { new String[0] }, new String[] { "b" }, "B1");
+	}
+
+	public void testPushedDownFieldIsReferencedInBaseGuard2() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] {}, new String[][] { new String[0] }, new String[] { "b" }, "B1");
+	}
+
+	public void testPushedDownFieldIsReferencedInBaseGuard3() throws Exception {
+		performPullUp_fail(new String[] { "B1", "B2", "T" }, new String[] {}, new String[][] { new String[0] }, new String[] { "b" }, "B1");
+	}
+	
+	public void testPushedDownFieldIsReferencedInParameterMapping1() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "R1");
+	}
+	
+	public void testPushedDownFieldIsReferencedInParameterMapping2() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "R1");
+	}
+	
+	public void testOverrideImplicitInheritedMethod() throws Exception {
+		performPullUp_fail(new String[] { "A", "T1", "T2" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, "A");
+	}
+	
+	public void testOverrideExplicitInheritedMethod() throws Exception {
+		performPullUp_pass(new String[] { "T2", "T1", "A" }, new String[] { "m" }, new String[][] { new String[0] }, new String[] {}, "R");
+	}
+	
+	// See Ticket #286
+	public void _testPushedDownFieldIsReferencedInParameterMapping3() throws Exception {
+		performPullUp_fail(new String[] { "T", "B" }, new String[] {}, new String[][] { new String[0] }, new String[] { "f" }, "R1");
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/AllTests.java
new file mode 100644
index 0000000..74bc249
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/AllTests.java
@@ -0,0 +1,54 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-Rename-Refactoring Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameMethodInInterfaceTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenamePrivateMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameStaticMethodTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameVirtualMethodInClassTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenamePrivateFieldTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.rename.RenameTypeTests.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodInInterfaceTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodInInterfaceTests.java
new file mode 100644
index 0000000..43074bb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodInInterfaceTests.java
@@ -0,0 +1,257 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodProcessor;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameVirtualMethodProcessor;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * @author brcan
+ *  
+ */
+public class RenameMethodInInterfaceTests extends RefactoringTest
+{
+    private static final String REFACTORING_PATH = "RenameMethodInInterface/";
+
+    public RenameMethodInInterfaceTests(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new MySetup(new TestSuite(RenameMethodInInterfaceTests.class));
+    }
+
+    public static Test setUpTest(Test test)
+    {
+        return new MySetup(test);
+    }
+
+    protected String getRefactoringPath()
+    {
+        return REFACTORING_PATH;
+    }
+
+    private RenameRefactoring createRefactoring(RenameMethodProcessor processor)
+    {
+        return new RenameRefactoring(processor);
+    }
+
+    private RenameMethodProcessor createProcessor(IMethod method)
+    {
+        return new RenameVirtualMethodProcessor(method);
+    }
+
+    private void performRenamingMtoK_failing(String[] cuQNames)
+    	throws Exception
+    {
+        performRenameRefactoring_failing(cuQNames, "m", "k", new String[0]);
+    }
+    
+    private void performRenameRefactoring_failing(
+            String[] cuQNames,
+            String methodName,
+            String newMethodName,
+            String[] signatures)
+    	throws Exception
+    {
+        ICompilationUnit[] cus = createCUs(cuQNames);
+        IType interfaceI = null;
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+            if (cus[idx].getElementName().equals("I.java"))
+            {
+                interfaceI = getType(cus[idx], "I");
+            }
+        }
+        RenameMethodProcessor processor = createProcessor(
+                interfaceI.getMethod(methodName, signatures));
+        RenameRefactoring ref = createRefactoring(processor);
+        processor.setNewElementName(newMethodName);
+        RefactoringStatus result = performRefactoring(ref);
+        assertNotNull("precondition was supposed to fail", result);
+    }
+
+    private void performRenaming_passing(String [] cuQNames)
+    	throws Exception
+    {
+        performRenamingMtoK_passing(cuQNames, true);
+    }
+    
+    /**
+     * Rename method m to k and update all references.
+     */
+    private void performRenamingMtoK_passing(
+            String [] cuQNames,
+            boolean updateReferences)
+    	throws Exception
+    {
+        performRenameRefactoring_passing(
+                cuQNames, "m", "k", new String[0], true, updateReferences);
+    }
+
+
+    private void performRenameRefactoring_passing(
+            String[] cuQNames,
+            String methodName, 
+            String newMethodName,
+            String[] signatures, 
+            boolean shouldPass, 
+            boolean updateReferences)
+    	throws Exception
+    {
+        ICompilationUnit[] cus = createCUs(cuQNames);
+        IType interfaceI = null;
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+            if (cus[idx].getElementName().equals("I.java"))
+            {
+                interfaceI = getType(cus[idx], "I");
+            }
+        }
+        RenameMethodProcessor processor = createProcessor(
+                interfaceI.getMethod(methodName, signatures));
+        RenameRefactoring ref = createRefactoring(processor);
+        processor.setUpdateReferences(updateReferences);
+        processor.setNewElementName(newMethodName);
+        assertEquals("was supposed to pass", null, performRefactoring(ref));
+        if (!shouldPass)
+        {
+            for (int idx = 0; idx < cus.length; idx++)
+            {
+	            assertTrue("incorrect renaming because of a java model bug",
+	                    !getFileContents(
+	                            getOutputTestFileName(getSimpleName(cuQNames[idx]))).
+	                            equals(cus[idx].getSource()));
+            }
+            return;
+        }
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+	        assertEqualLines("incorrect renaming",
+	                getFileContents(
+	                        getOutputTestFileName(
+	                                getSimpleName(cuQNames[idx]))), cus[idx].getSource());
+        }	
+        assertTrue("anythingToUndo", RefactoringCore.getUndoManager()
+                .anythingToUndo());
+        assertTrue("! anythingToRedo", !RefactoringCore.getUndoManager()
+                .anythingToRedo());
+        //assertEquals("1 to undo", 1,
+        // Refactoring.getUndoManager().getRefactoringLog().size());
+
+        RefactoringCore.getUndoManager().performUndo(null,
+                new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+            assertEqualLines("invalid undo",
+                    getFileContents(
+                            getInputTestFileName(
+                                    getSimpleName(cuQNames[idx]))), cus[idx].getSource());
+        }
+        assertTrue("! anythingToUndo", !RefactoringCore.getUndoManager()
+                .anythingToUndo());
+        assertTrue("anythingToRedo", RefactoringCore.getUndoManager()
+                .anythingToRedo());
+        RefactoringCore.getUndoManager().performRedo(null,
+                new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+	        assertEqualLines("invalid redo",
+	                getFileContents(
+	                        getOutputTestFileName(
+	                                getSimpleName(cuQNames[idx]))), cus[idx].getSource());
+        }
+    }
+
+    private ICompilationUnit[] createCUs(String[] qualifiedNames)
+		throws Exception
+	{
+	    ICompilationUnit[] cus = new ICompilationUnit[qualifiedNames.length];
+	
+	    for (int idx = 0; idx < qualifiedNames.length; idx++)
+	    {
+	        Assert.isNotNull(qualifiedNames[idx]);
+	        cus[idx] = createCUfromTestFile(getRoot().createPackageFragment(
+	                	getQualifier(qualifiedNames[idx]), true, null),
+	                	getSimpleName(qualifiedNames[idx]));
+	    }
+	    return cus;
+	}
+    
+    private String getQualifier(String qualifiedName)
+    {
+        int dot = qualifiedName.lastIndexOf('.');
+        return qualifiedName.substring(0, dot != -1 ? dot : 0);
+    }
+
+    private String getSimpleName(String qualifiedName)
+    {
+        return qualifiedName.substring(qualifiedName.lastIndexOf('.') + 1);
+    }
+
+    /********** tests **********/
+    //passing
+    public void testUpdateImplementationInRoleClass() throws Exception
+    {
+        performRenaming_passing(new String[] {"p.I", "p.T"});
+    }
+    public void testUpdateImplementationInExplicitlyInheritedRoleClass()
+    	throws Exception
+    {
+        performRenaming_passing(new String[] {"p.I", "p.T"});
+    }
+    public void testUpdateImplementationInImplicitlyInheritedRoleClass()
+    	throws Exception
+    {
+        performRenaming_passing(new String[] {"p.I", "p.T1", "p.T2"});
+    }
+    //failing
+    public void testMethodAlreadyExistsInRoleClass() throws Exception
+    {
+        performRenamingMtoK_failing(new String[] {"p.I", "p.T"});
+    }
+    public void testMethodAlreadyExistsInExplicitlyInheritedRoleClass()
+    	throws Exception
+    {
+        performRenamingMtoK_failing(new String[] {"p.I", "p.T"});
+    }
+    public void testMethodAlreadyExistsInImplicitlyInheritedRoleClass()
+	    throws Exception
+	{
+	    performRenamingMtoK_failing(new String[] {"p.I", "p.T1", "p.T2"});
+	}
+
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodTests.java
new file mode 100644
index 0000000..8dc8c68
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameMethodTests.java
@@ -0,0 +1,43 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ *

+ */

+public class RenameMethodTests

+{

+	public static Test suite()

+	{

+		TestSuite suite = new TestSuite(RenameMethodTests.class.getName());

+		

+		suite.addTest(RenameVirtualMethodInClassTests.suite());

+		suite.addTest(RenameMethodInInterfaceTests.suite());

+		suite.addTest(RenamePrivateMethodTests.suite());	

+		suite.addTest(RenameStaticMethodTests.suite());

+

+		return suite;

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateFieldTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateFieldTests.java
new file mode 100644
index 0000000..42f2c88
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateFieldTests.java
@@ -0,0 +1,418 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameArguments;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor;
+
+/**
+ * @author jwl
+ *
+ */
+public class RenamePrivateFieldTests extends RefactoringTest
+{
+	private static final Class	clazz            = RenamePrivateFieldTests.class;
+	private static final String	REFACTORING_PATH = "RenamePrivateField/";
+
+	private Object _prefixPref;
+
+	public RenamePrivateFieldTests(String name)
+	{
+		super(name);
+	}
+
+	public static Test suite()
+	{
+		return new MySetup(new TestSuite(clazz));
+	}
+
+	public static Test setUpTest(Test someTest)
+	{
+		return new MySetup(someTest);
+	}
+
+	protected String getRefactoringPath()
+	{
+		return REFACTORING_PATH;
+	}
+
+	protected void setUp() throws Exception
+	{
+		super.setUp();
+		Hashtable options = JavaCore.getOptions();
+		_prefixPref = options.get(JavaCore.CODEASSIST_FIELD_PREFIXES);
+		options.put(JavaCore.CODEASSIST_FIELD_PREFIXES, getPrefixes());
+		JavaCore.setOptions(options);
+	}
+
+	protected void tearDown() throws Exception
+	{
+		super.tearDown();
+		Hashtable options = JavaCore.getOptions();
+		options.put(JavaCore.CODEASSIST_FIELD_PREFIXES, _prefixPref);
+		JavaCore.setOptions(options);
+	}
+
+	private String getPrefixes()
+	{
+		return "_";
+	}
+
+    private void performRenamingFtoG_failing(
+            String[] cuNames, 
+            String selectionCuName, 
+            String declaringTypeName)
+        throws Exception
+    {
+    	performRenaming_failing(cuNames, selectionCuName, declaringTypeName, "f", "g");
+    }
+
+    private void performRenaming_failing(
+            String[] cuNames,
+            String selectionCuName,
+            String declaringTypeName,
+            String fieldName,
+            String newFieldName)
+        throws Exception
+    {
+    	performRenameRefactoring_failing(
+                cuNames, selectionCuName, declaringTypeName, fieldName, newFieldName, false, false);
+    }
+
+
+	private void performRenameRefactoring_failing(
+            String[] cuNames,
+            String selectionCuName,
+            String declaringTypeName,
+            String fieldName,
+            String newFieldName,
+            boolean renameGetter, 
+            boolean renameSetter) throws Exception
+	{
+        int selectionCuIndex = firstIndexOf(selectionCuName, cuNames);
+        Assert.isTrue(selectionCuIndex != -1,
+                "parameter selectionCuQName must match some String in cuQNames.");
+        Assert.isTrue(0 <= selectionCuIndex
+                && selectionCuIndex < cuNames.length);
+
+        ICompilationUnit[] cus = createCUs(cuNames);
+        ICompilationUnit declaringCu = cus[selectionCuIndex];
+        IType declaringType = getType(declaringCu, declaringTypeName);
+        IField field = declaringType.getField(fieldName);
+		RenameFieldProcessor processor = new RenameFieldProcessor(field);
+		RenameRefactoring refactoring = new RenameRefactoring(processor);
+		processor.setNewElementName(newFieldName);
+		processor.setRenameGetter(renameGetter);
+		processor.setRenameSetter(renameSetter);
+		RefactoringStatus result = performRefactoring(refactoring);
+		assertNotNull("precondition was supposed to fail", result);
+	}
+
+    private void performRenamingFtoG_passing(
+            String[] cuNames,
+            String declaringTypeName, 
+            boolean updateReferences) throws Exception
+    {
+        performRenameRefactoring_passing(
+                cuNames, declaringTypeName, "f", "g",
+                updateReferences, false, false, false, false, false);
+    }
+
+	private void performRenameRefactoring_passing(
+            String[] cuNames,
+            String declaringTypeName,
+            String fieldName,
+            String newFieldName,
+			boolean updateReferences,
+            boolean updateTextualMatches,
+			boolean renameGetter,
+            boolean renameSetter,
+			boolean expectedGetterRenameEnabled,
+			boolean expectedSetterRenameEnabled) throws Exception
+	{
+//		ParticipantTesting.reset();
+		ICompilationUnit[] cus = createCUs(cuNames);
+		IType declaringType = getType(cus[0], declaringTypeName);
+		IField field = declaringType.getField(fieldName);
+		RenameFieldProcessor processor = new RenameFieldProcessor(field);
+		RenameRefactoring refactoring = new RenameRefactoring(processor);
+		processor.setUpdateReferences(updateReferences);
+		processor.setUpdateTextualMatches(updateTextualMatches);
+//		assertEquals("getter rename enabled", expectedGetterRenameEnabled,
+//				processor.canEnableGetterRenaming() == null);
+//		assertEquals("setter rename enabled", expectedSetterRenameEnabled,
+//				processor.canEnableSetterRenaming() == null);
+		processor.setRenameGetter(renameGetter);
+		processor.setRenameSetter(renameSetter);
+		processor.setNewElementName(newFieldName);
+		String newGetterName = processor.getNewGetterName();
+		String newSetterName = processor.getNewSetterName();
+
+		int numbers = 1;
+		List elements = new ArrayList();
+		elements.add(field);
+		List args = new ArrayList();
+		args.add(new RenameArguments(newFieldName, updateReferences));
+		if (renameGetter && expectedGetterRenameEnabled)
+		{
+			elements.add(processor.getGetter());
+			args.add(new RenameArguments(newGetterName, updateReferences));
+			numbers++;
+		}
+		if (renameSetter && expectedSetterRenameEnabled)
+		{
+			elements.add(processor.getSetter());
+			args.add(new RenameArguments(newSetterName, updateReferences));
+			numbers++;
+		}
+//		String[] renameHandles = ParticipantTesting.createHandles(elements
+//				.toArray());
+
+		RefactoringStatus result = performRefactoring(refactoring);
+		assertEquals("was supposed to pass", null, result);
+        for (int idx = 0; idx < cus.length; idx++)
+		{
+    		assertEqualLines("invalid renaming!",
+    				getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+		}
+
+//		ParticipantTesting.testRename(renameHandles, (RenameArguments[])args
+//				.toArray(new RenameArguments[args.size()]));
+
+		assertTrue("anythingToUndo", RefactoringCore.getUndoManager()
+				.anythingToUndo());
+		assertTrue("! anythingToRedo", !RefactoringCore.getUndoManager()
+				.anythingToRedo());
+
+		RefactoringCore.getUndoManager().performUndo(null,
+				new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+		{
+    		assertEqualLines("invalid undo",
+    				getFileContents(createInputTestFileName(cus, idx)), cus[idx].getSource());
+        }
+        
+		assertTrue("! anythingToUndo", !RefactoringCore.getUndoManager()
+				.anythingToUndo());
+		assertTrue("anythingToRedo", RefactoringCore.getUndoManager()
+				.anythingToRedo());
+
+		RefactoringCore.getUndoManager().performRedo(null,
+				new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+    		assertEqualLines("invalid redo",
+    				getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+        }
+	}
+
+    private int firstIndexOf(String one, String[] others)
+    {
+        for (int idx = 0; idx < others.length; idx++)
+        {
+            if (one == null && others[idx] == null || one.equals(others[idx]))
+            {
+                return idx;
+            }
+        }
+        return -1;
+    }
+
+    private String createInputTestFileName(ICompilationUnit[] cus, int idx)
+    {
+        return getInputTestFileName(getSimpleNameOfCu(
+                cus[idx].getElementName()));
+    }
+
+    private String createOutputTestFileName(ICompilationUnit[] cus,
+                                                int idx)
+    {
+        return getOutputTestFileName(getSimpleNameOfCu(cus[idx].
+                getElementName()));
+    }
+
+    private String getSimpleNameOfCu(String compUnit)
+    {
+        int dot = compUnit.lastIndexOf('.');
+        return compUnit.substring(0, dot);
+    }
+    
+    private String getUnqualifiedMemberTypeName(String qualifiedMemberType)
+    {
+    	int dot = qualifiedMemberType.indexOf('.');
+        if (dot != -1)
+        {
+        	return qualifiedMemberType.substring(dot+1);
+        }
+        return qualifiedMemberType;
+    }
+
+    private ICompilationUnit[] createCUs(String[] cuNames) throws Exception
+    {
+        ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+    
+        for (int idx = 0; idx < cuNames.length; idx++)
+        {
+            Assert.isNotNull(cuNames[idx]);
+            cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+        }
+        return cus;
+    }
+
+	//--------- tests ----------
+    public void testRenameFieldInTeamclass() throws Exception
+	{
+        performRenamingFtoG_passing(new String[]{"T"}, "T", true);
+	}
+    
+    public void testUpdateFieldReferenceInTeamMethod() throws Exception
+    {
+        performRenamingFtoG_passing(new String[]{"T"}, "T", true);
+    }
+    
+    public void testUpdateFieldReferenceInLiftingMethod() throws Exception
+    {
+        performRenamingFtoG_passing(new String[]{"T"}, "T", true);
+    }
+
+    public void testUpdateTeamFieldReferenceInRoleclass1() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "T", "number", "amount",
+                true, false, false, false, false, false);
+    }
+
+    public void testUpdateTeamFieldReferenceInRoleclass2() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "T", "number", "amount",
+                true, false, false, false, false, false);
+    }
+    
+    public void testUpdateTeamFieldReferenceInNestedTeam1() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "T", "number", "amount",
+                true, false, false, false, false, false);
+    }
+
+    public void testUpdateTeamFieldReferenceInNestedTeam2() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "T", "number", "amount",
+                true, false, false, false, false, false);
+    }
+
+    public void testRenameFieldInRoleclass() throws Exception
+	{
+        performRenamingFtoG_passing(new String[]{"T"}, "R", true);
+	}
+    
+    public void testUpdateFieldReferenceInRoleclass1() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "R", "name", "newName",
+                true, false, true, false, true, false);
+    }
+
+    public void testUpdateFieldReferenceInRoleclass2() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "R", "name", "newName",
+                true, true, true, true, true, true);
+    }
+
+    public void testUpdateFieldReferenceInRoleclass3() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "R", "name", "newName",
+                true, false, false, true, false, true);
+    }
+
+	public void testUpdateReferenceInCalloutToField1() throws Exception
+	{
+        performRenamingFtoG_passing(new String[]{"B", "T"}, "B", true);
+	}
+	//private field from super base class visible in bound base class
+    public void testUpdateReferenceInCalloutToField2() throws Exception
+    {
+        performRenamingFtoG_passing(new String[]{"B1", "B2", "T"}, "B1", true);
+    }
+    //shorthand definition: callout to field access method without
+    //prior abstract declaration + method names only
+    public void testUpdateReferenceInCalloutToField3() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"B", "T"}, "B", "name", "surname",
+                true, false, false, false, false, false);
+    }
+    //shorthand definition: callout to field access method without
+    //prior abstract declaration + complete signatures
+    public void testUpdateReferenceInCalloutToField4() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"B", "T"}, "B", "name", "surname",
+                true, false, false, false, false, false);
+    }
+    
+    //passing
+    public void testRenameGetterAndSetter1() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "T", "number", "index",
+                true, false, true, true, true, true);
+    }
+    public void testRenameGetterAndSetter2() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"T"}, "R", "number", "index",
+                true, false, true, true, true, true);
+    }
+    //failing
+    public void testRenameGetterAndSetter3() throws Exception
+    {
+        performRenameRefactoring_failing(
+                new String[]{"T1", "T2"}, "T2", "T2", "number", "index", true, true);
+    }
+    public void testRenameGetterAndSetter4() throws Exception
+    {
+        performRenameRefactoring_failing(
+                new String[]{"T1", "T2"}, "T2", "R", "number", "index", true, true);
+    }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateMethodTests.java
new file mode 100644
index 0000000..8fa6f0a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenamePrivateMethodTests.java
@@ -0,0 +1,234 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+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.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameNonVirtualMethodProcessor;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodProcessor;
+
+/**
+ * The tests in this class have been inspired by the test class
+ * <code>RenamePrivateMethodTests</code> in the test suite
+ *<code>org.eclipse.jdt.ui.tests.refactoring</code> provided by Eclipse JDT.
+ *  
+ * @author brcan
+ */
+public class RenamePrivateMethodTests extends RefactoringTest
+{
+	private static final String REFACTORING_PATH = "RenamePrivateMethod/";
+
+	public RenamePrivateMethodTests(String name)
+	{
+		super(name);
+	}
+
+	public static Test suite()
+	{
+		return new MySetup(new TestSuite(RenamePrivateMethodTests.class));
+	}
+
+	public static Test setUpTest(Test test)
+	{
+		return new MySetup(test);
+	}
+	
+	protected String getRefactoringPath()
+	{
+		return REFACTORING_PATH;
+	}
+	
+    private RenameRefactoring createRefactoring(RenameMethodProcessor processor)
+    {
+        return new RenameRefactoring(processor);
+    }
+
+    private RenameMethodProcessor createProcessor(IMethod method)
+    {
+        return new RenameNonVirtualMethodProcessor(method);
+    }
+
+	private void performRenameRefactoring_failing(
+	        String methodName,
+	        String newMethodName,
+	        String[] signatures) 
+		throws Exception
+    {
+		IType classA = getType(createCUfromTestFile(getPackageP(), "A"), "A");
+		RenameMethodProcessor processor =
+		    createProcessor(classA.getMethod(methodName, signatures));
+		RenameRefactoring refactoring = createRefactoring(processor);
+		processor.setNewElementName(newMethodName);
+		RefactoringStatus result= performRefactoring(refactoring);
+		assertNotNull("precondition was supposed to fail", result);
+	}
+	
+	private void performRenaming_failing() throws Exception
+	{
+		performRenameRefactoring_failing("m", "k", new String[0]);
+	}
+
+	private void performRenaming_passing(
+	        String cuNames[],
+	        String declaringTypeName) throws Exception
+	{
+		performRenamingMtoK_passing(cuNames, declaringTypeName, true);
+	}
+	
+	private void performRenamingMtoK_passing(
+	        String cuNames[],
+	        String declaringTypeName,
+	        boolean updateReferences)
+		throws Exception
+	{
+		performRenameRefactoring_passing(
+		        cuNames, declaringTypeName, "m", "k", new String[0], updateReferences);
+	}
+	
+	private void performRenameRefactoring_passing(
+	        String[] cuNames,
+	        String declaringTypeName,
+	        String methodName,
+	        String newMethodName,
+	        String[] signatures,
+	        boolean updateReferences)
+		throws Exception
+	{
+		ICompilationUnit[] cus = createCUs(cuNames);
+		IType declaringType = getType(cus[0], declaringTypeName);
+		IMethod method = declaringType.getMethod(methodName, signatures);
+		RenameMethodProcessor processor = createProcessor(method);
+		RenameRefactoring refactoring = createRefactoring(processor);
+		processor.setUpdateReferences(updateReferences);
+		processor.setNewElementName(newMethodName);
+		assertEquals("was supposed to pass", null, performRefactoring(refactoring));
+        for (int idx = 0; idx < cus.length; idx++)
+		{
+    		assertEqualLines("invalid renaming!",
+    				getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+		}
+				
+		assertTrue("anythingToUndo", RefactoringCore.getUndoManager()
+				.anythingToUndo());
+		assertTrue("! anythingToRedo", !RefactoringCore.getUndoManager()
+				.anythingToRedo());
+
+		RefactoringCore.getUndoManager().performUndo(null,
+				new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+		{
+    		assertEqualLines("invalid undo",
+    				getFileContents(createInputTestFileName(cus, idx)), cus[idx].getSource());
+        }
+        
+		assertTrue("! anythingToUndo", !RefactoringCore.getUndoManager()
+				.anythingToUndo());
+		assertTrue("anythingToRedo", RefactoringCore.getUndoManager()
+				.anythingToRedo());
+
+		RefactoringCore.getUndoManager().performRedo(null,
+				new NullProgressMonitor());
+        for (int idx = 0; idx < cus.length; idx++)
+        {
+    		assertEqualLines("invalid redo",
+    		        getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+        }
+	}
+
+    private ICompilationUnit[] createCUs(String[] cuNames) throws Exception
+    {
+        ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+	
+	    for (int idx = 0; idx < cuNames.length; idx++)
+	    {
+	        Assert.isNotNull(cuNames[idx]);
+	        cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+	    }
+	    return cus;
+	}
+
+    private String createInputTestFileName(ICompilationUnit[] cus, int idx)
+    {
+        return getInputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+    }
+
+    private String createOutputTestFileName(ICompilationUnit[] cus, int idx)
+    {
+        return getOutputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+    }
+
+    private String getSimpleNameOfCu(String compUnit)
+    {
+        int dot = compUnit.lastIndexOf('.');
+        return compUnit.substring(0, dot);
+    }
+
+	/******* tests ******************/
+	
+    public void testUpdateReferenceInCalloutBinding1() throws Exception
+    {
+        performRenaming_passing(new String[]{"B", "T"}, "B");
+    } 
+	
+    public void testUpdateReferenceInCalloutBinding2() throws Exception
+    {
+        performRenameRefactoring_passing(
+                new String[]{"B", "T"}, "B", "getAmount", "getQuantity", null, true);
+    }
+	
+    public void testUpdateReferenceInCallinBinding1() throws Exception
+    {
+        performRenaming_passing(new String[]{"B", "T"}, "B");
+    }
+
+    public void testUpdateReferenceInCallinBinding2() throws Exception
+    {
+        performRenaming_passing(new String[]{"B", "T"}, "B");
+    }
+
+    //renaming of private role method
+    public void testPrivateMethodInTeamclass() throws Exception
+    {
+        performRenaming_passing(new String[]{"T"}, "T");
+    }
+    
+    public void testUpdatePrivateTeamMethodInvocation1() throws Exception
+    {
+        performRenaming_passing(new String[]{"T"}, "T");
+    }
+    
+    public void testUpdatePrivateTeamMethodInvocation2() throws Exception
+    {
+        performRenameRefactoring_passing(new String[]{"T", "B1"}, "T", "m1", "k1", null, true);
+    }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameStaticMethodTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameStaticMethodTests.java
new file mode 100644
index 0000000..9fa880e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameStaticMethodTests.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ * 	   Fraunhofer FIRST - Initial API and implementation
+ * 	   Technical University Berlin - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+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.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.Signature;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodProcessor;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameNonVirtualMethodProcessor;
+
+/**
+ * The tests in this class have initially been copied from the original class
+ * <code>RenameStaticMethodTests</code> in the test suite
+ *<code>org.eclipse.jdt.ui.tests.refactoring</code> provided by Eclipse. 
+ * 
+ * @author brcan
+ */
+public class RenameStaticMethodTests extends RefactoringTest
+{
+    private static final String REFACTORING_PATH = "RenameStaticMethod/";
+
+    public RenameStaticMethodTests(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new MySetup(new TestSuite(RenameStaticMethodTests.class));
+    }
+
+    protected String getRefactoringPath()
+    {
+        return REFACTORING_PATH;
+    }
+
+    private RenameRefactoring createRefactoring(RenameMethodProcessor processor)
+    {
+        return new RenameRefactoring(processor);
+    }
+
+    private RenameMethodProcessor createProcessor(IMethod method)
+    {
+        return new RenameNonVirtualMethodProcessor(method);
+    }
+
+    private void performRenamingMtoK_failing() throws Exception
+    {
+        performRenameRefactoring_failing("m", "k", new String[0]);
+    }
+
+    private void performRenameRefactoring_failing(
+            String methodName,
+            String newMethodName,
+            String[] signatures)
+    	throws Exception
+    {
+        IType classA = getType(createCUfromTestFile(getPackageP(), "A"), "A");
+        try
+        {
+            RenameMethodProcessor processor =
+                createProcessor(classA.getMethod(methodName, signatures));
+            RenameRefactoring refactoring = createRefactoring(processor);
+            processor.setNewElementName(newMethodName);
+            RefactoringStatus result = performRefactoring(refactoring);
+            assertNotNull("precondition was supposed to fail", result);
+        }
+        finally
+        {
+            performDummySearch();
+            classA.getCompilationUnit().delete(true, null);
+        }
+    }
+
+    private void performRenaming_passing() throws Exception
+    {
+        performRenamingMtoK_passing(true);
+    }
+
+    /**
+     * Rename method m to k and update all references.
+     */
+    private void performRenamingMtoK_passing(boolean updateReferences)
+    	throws Exception
+    {
+        performRenameRefactoring_passing1("m", "k", new String[0], updateReferences);
+    }
+
+	private void performRenameRefactoring_passing2(
+	        String methodName,
+	        String newMethodName,
+	        String[] signatures)
+		throws Exception
+	{
+	    performRenameRefactoring_passing1(methodName, newMethodName, signatures, true);
+	}
+
+    private void performRenameRefactoring_passing1(
+            String methodName,
+            String newMethodName,
+            String[] signatures,
+            boolean updateReferences)
+    	throws Exception
+    {
+        ICompilationUnit cu = createCUfromTestFile(getPackageP(), "A");
+        try
+        {
+            IType classA = getType(cu, "A");
+            RenameMethodProcessor processor =
+                createProcessor(classA.getMethod(methodName, signatures));
+            RenameRefactoring refactoring = createRefactoring(processor);
+            processor.setUpdateReferences(updateReferences);
+            processor.setNewElementName(newMethodName);
+            assertEquals("was supposed to pass", null,
+                    performRefactoring(refactoring));
+            assertEqualLines("invalid renaming",
+                    getFileContents(getOutputTestFileName("A")), cu.getSource());
+
+            assertTrue("anythingToUndo", RefactoringCore.getUndoManager()
+                    .anythingToUndo());
+            assertTrue("! anythingToRedo", !RefactoringCore.getUndoManager()
+                    .anythingToRedo());
+
+            RefactoringCore.getUndoManager().performUndo(null,
+                    new NullProgressMonitor());
+            assertEqualLines("invalid undo",
+                    getFileContents(getInputTestFileName("A")), cu.getSource());
+
+            assertTrue("! anythingToUndo", !RefactoringCore.getUndoManager()
+                    .anythingToUndo());
+            assertTrue("anythingToRedo", RefactoringCore.getUndoManager()
+                    .anythingToRedo());
+
+            RefactoringCore.getUndoManager().performRedo(null,
+                    new NullProgressMonitor());
+            assertEqualLines("invalid redo",
+                    getFileContents(getOutputTestFileName("A")), cu.getSource());
+        }
+        finally
+        {
+            performDummySearch();
+            cu.delete(true, null);
+        }
+    }
+
+    /********** tests **********/
+// test method template
+//	public void test0() throws Exception
+//	{
+//		helper0_passing();
+//	}
+    
+	public void testFail0() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail1() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail2() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	//testFail3 deleted
+	
+	public void testFail4() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail5() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail6() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail7() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void testFail8() throws Exception{
+	    performRenamingMtoK_failing();
+	}
+	
+	public void test0() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test1() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test2() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test3() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test4() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test5() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test6() throws Exception{
+	    performRenaming_passing();
+	}
+	
+	public void test7() throws Exception{
+	    performRenameRefactoring_passing2("m", "k", new String[]{Signature.SIG_INT});
+	}
+	
+	public void test8() throws Exception{
+	    performRenameRefactoring_passing2("m", "k", new String[]{Signature.SIG_INT});
+	}
+	
+	public void test9() throws Exception{
+	    performRenameRefactoring_passing1("m", "k", new String[]{Signature.SIG_INT}, false);
+	}
+	
+	public void test10() throws Exception
+	{
+		ICompilationUnit cuA = createCUfromTestFile(getPackageP(), "A");
+		ICompilationUnit cuB = createCUfromTestFile(getPackageP(), "B");
+
+		IType classB = getType(cuB, "B");
+		RenameMethodProcessor processor =
+		    createProcessor(classB.getMethod("method", new String[0]));
+		RenameRefactoring refactoring = createRefactoring(processor);
+		processor.setUpdateReferences(true);
+		processor.setNewElementName("newmethod");
+		assertEquals("was supposed to pass", null, performRefactoring(refactoring));
+		assertEqualLines("invalid renaming in A", getFileContents(
+		        getOutputTestFileName("A")), cuA.getSource());
+		assertEqualLines("invalid renaming in B", getFileContents(
+		        getOutputTestFileName("B")), cuB.getSource());
+	}
+
+	public void test11() throws Exception
+	{
+		IPackageFragment packageA =
+		    getRoot().createPackageFragment("a", false, new NullProgressMonitor());
+		IPackageFragment packageB =
+		    getRoot().createPackageFragment("b", false, new NullProgressMonitor());
+		try
+		{
+			ICompilationUnit cuA = createCUfromTestFile(packageA, "A");
+			ICompilationUnit cuB = createCUfromTestFile(packageB, "B");
+	
+			IType classA = getType(cuA, "A");
+			RenameMethodProcessor processor =
+			    createProcessor(classA.getMethod("method2", new String[0]));
+			RenameRefactoring refactoring = createRefactoring(processor);
+			processor.setUpdateReferences(true);
+			processor.setNewElementName("fred");
+			assertEquals("was supposed to pass", null, performRefactoring(refactoring));
+			assertEqualLines("invalid renaming in A", getFileContents(
+			        getOutputTestFileName("A")), cuA.getSource());
+			assertEqualLines("invalid renaming in B", getFileContents(
+			        getOutputTestFileName("B")), cuB.getSource());
+		}
+		finally
+		{
+			packageA.delete(true, new NullProgressMonitor());
+			packageB.delete(true, new NullProgressMonitor());
+		}
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameTypeTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameTypeTests.java
new file mode 100644
index 0000000..a195882
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameTypeTests.java
@@ -0,0 +1,463 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+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.rename.RenameTypeProcessor;
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameProcessor;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * FIXME(SH):
+ * Once this test class is reactivated, also check the following conditions which are
+ * known not to work currently (e.g., OTDT 1.1.6):
+ * + Rename role type: 
+ *   - inline (not dialog-based) refactoring links all references of a role type but not: 
+ *     - its declaration 
+ *     - class literals 
+ *     (linked-mode in the Editor).
+ *   - class literals in a predicate are not renamed
+ * 
+ * @author brcan
+ *  
+ */
+@SuppressWarnings({"restriction", "nls"})
+public class RenameTypeTests extends RefactoringTest
+{
+    private static final String REFACTORING_PATH = "RenameType/";
+    
+    private static IPackageFragment _teamPkg;
+    
+    private RenameProcessor _processor = null;
+
+    
+    public RenameTypeTests(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new MySetup(new TestSuite(RenameTypeTests.class));
+    }
+
+    public static Test setUpTest(Test someTest)
+    {
+        return new MySetup(someTest);
+    }
+
+    protected String getRefactoringPath()
+    {
+        return REFACTORING_PATH;
+    }
+
+//	MIGRATE
+	private RenameRefactoring createRefactoring(IType type, String newName)
+    	throws CoreException
+    {
+        _processor = new RenameTypeProcessor(type);
+        RenameTypeProcessor renameTypeProcessor = (RenameTypeProcessor)_processor;
+        renameTypeProcessor.setNewElementName(newName);
+	    RenameRefactoring ref = new RenameRefactoring(renameTypeProcessor);
+        return ref;
+    }
+
+    private void createTeamPackageFragment() throws Exception
+    {
+        _teamPkg = getRoot().createPackageFragment("p.T1", true, null);
+    }
+    
+    private IPackageFragment getUpdatedTeamPackageFragment() throws Exception
+    {
+        return getRoot().getPackageFragment("p.T2");
+    }
+
+    private IPackageFragment getTeamPackage()
+    {
+        return _teamPkg;
+    }
+
+    private void performRenameRefactoring_failing(
+            String[] cuNames,
+            String targetTypeName,
+            String newName,
+			boolean roleFilesExist) throws Exception
+    {
+        if (roleFilesExist) {
+			createTeamPackageFragment();
+		}
+        ICompilationUnit[] cus = createCUs(cuNames);
+        IType targetType = getType(cus[0], targetTypeName);
+        Refactoring ref = createRefactoring(targetType, newName);
+        RefactoringStatus result = performRefactoring(ref);
+        assertNotNull("precondition was supposed to fail", result);
+    }
+
+//	MIGRATE
+//    private String[] performRenameRefactoringOneCU_passing(
+//            String oldCuName,
+//            String oldName,
+//            String newName,
+//            String newCUName,
+//            boolean updateReferences,
+//            boolean updateTextualMatches) throws Exception
+//    {
+//        ICompilationUnit cu = createCUfromTestFile(getPackageP(), oldCuName);
+//        IType classA = getType(cu, oldName);
+//
+//        IPackageFragment pack = (IPackageFragment) cu.getParent();
+//        String[] renameHandles = null;
+//        if (classA.getDeclaringType() == null &&
+//                cu.getElementName().startsWith(classA.getElementName()))
+//        {
+//            renameHandles = ParticipantTesting.createHandles(classA, cu, cu.getResource());
+//        }
+//        else
+//        {
+//            renameHandles = ParticipantTesting.createHandles(classA);
+//        }
+//        RenameRefactoring ref = createRefactoring(classA, newName);
+//        RenameTypeProcessor processor = (RenameTypeProcessor) ref.getProcessor();
+//        processor.setUpdateReferences(updateReferences);
+//        processor.setUpdateTextualMatches(updateTextualMatches);
+//        assertEquals("was supposed to pass", null, performRefactoring(ref));
+//        ICompilationUnit newcu = pack.getCompilationUnit(newCUName + ".java");
+//        assertTrue("cu " + newcu.getElementName() + " does not exist", newcu.exists());
+//        assertEqualLines(
+//                "invalid renaming!",
+//                getFileContents(getOutputTestFileName(newCUName)),
+//                newcu.getSource());
+//        return renameHandles;
+//    }
+
+    private void performRenameRefactoring_passing(
+            String[] cuNames,
+            String targetTypeName,
+            String newName,
+            boolean roleFilesExist,
+            boolean updateReferences,
+            boolean updateTextualMatches) throws Exception
+    {
+//    	MIGRATE
+        if (roleFilesExist)
+        {
+            createTeamPackageFragment();
+        }
+        ICompilationUnit[] cus = createCUs(cuNames);
+        IType targetType = getType(cus[0], targetTypeName);
+        IPackageFragment pack = (IPackageFragment) cus[0].getParent();
+        RenameRefactoring refactoring = createRefactoring(targetType, newName);
+        RenameTypeProcessor renameTypeProcessor = (RenameTypeProcessor)_processor;
+        renameTypeProcessor.setUpdateReferences(updateReferences);
+        renameTypeProcessor.setUpdateTextualMatches(updateTextualMatches);
+		RefactoringStatus result = performRefactoring(refactoring);
+		assertEquals("was supposed to pass", null, result);
+		//if a top-level type is renamed, its compilation unit is also renamed
+		if (targetType.getDeclaringType() == null &&
+		        cus[0].getElementName().startsWith(targetType.getElementName()))
+		{
+		    ICompilationUnit newCu = pack.getCompilationUnit(newName + ".java");
+			assertTrue("cu " + newCu.getElementName() + " does not exist", newCu.exists());
+			assertEqualLines("invalid renaming!",
+			        getFileContents(getOutputTestFileName(newName)), newCu.getSource());
+			if (roleFilesExist)
+			{
+			    IPackageFragment updatedTeamPackage = getUpdatedTeamPackageFragment();
+		        for (int idx = 0; idx < cus.length; idx++)
+				{
+		            if (cus[idx].getElementName().startsWith("R") ||
+		                    cus[idx].getElementName().startsWith("TR"))
+		                
+		            {
+		                cus[idx] = updatedTeamPackage.getCompilationUnit(cus[idx].getElementName());
+			    		assertEqualLines("invalid renaming!",
+			    		        getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+		            }
+				}
+			}
+		}
+		else
+		{
+	        for (int idx = 0; idx < cus.length; idx++)
+			{
+	    		assertEqualLines("invalid renaming!",
+	    		        getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+			}
+
+		}
+    }
+    
+    private String getSimpleNameOfCu(String compUnit)
+    {
+        int dot = compUnit.lastIndexOf('.');
+        return compUnit.substring(0, dot);
+    }
+    
+    private String createOutputTestFileName(ICompilationUnit[] cus, int idx)
+    {
+        return getOutputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+    }
+
+    private ICompilationUnit[] createCUs(String[] cuNames) throws Exception
+    {
+        ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+        for (int idx = 0; idx < cuNames.length; idx++)
+        {
+            Assert.isNotNull(cuNames[idx]);
+            if (cuNames[idx].startsWith("R") || cuNames[idx].startsWith("TR"))
+            {
+                cus[idx] = createCUfromTestFile(getTeamPackage(), cuNames[idx]);
+            }
+            else
+            {
+	            cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+            }
+        }
+        return cus;
+    }
+    
+    /*********** tests ***********/
+    //passing
+	public void testRenameTeamclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1" }, "T1", "T2", false, true, false);
+	}
+
+	public void testRenameNestedTeamclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "TR1", "TR2", false, true, false);
+	}
+
+	public void testUpdateReferencesToTeamclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1" }, "T1", "T2", false, true, false);
+	}
+
+	public void testUpdateReferencesToNestedTeamclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "TR1", "TR2", false, true, false);
+	}
+
+	public void testRenameRoleclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "R1", "R2", false, true, false);
+	}
+
+	public void testRenameRoleclassPrecedence() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "R2", "ROut", false, true, false);
+	}
+
+	public void testRenameRoleclassLiteralInPredicate() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "R1", "ROut", false, true, false);
+	}
+
+	public void testRenameInnermostRole() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "IR1", "IR2", false, true, false);
+	}
+
+	public void testUpdateReferencesToRoleclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "R1", "R2", false, true, false);
+	}
+
+	public void testUpdateReferencesToInnermostRole() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T" }, "IR1", "IR2", false, true, false);
+	}
+
+	// see https://svn.objectteams.org/trac/ot/ticket/80
+	public void testUpdateImplicitSuperRoles() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T2", "T1" }, "R1", "R3", false, true, false);
+	}
+
+	public void testUpdateImplicitSubRoles() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testRenameImplicitSuperRoles1() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T8", "T2", "T3", "T4", "T5", "T6", "T7", "T1" }, "R2", "R_New", false, true, false);
+	}
+
+	public void testRenameImplicitSuperRoles2() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T2", "T1" }, "R1", "R4", false, true, false);
+	}
+
+	public void testRenameImplicitSubRoles1() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8" }, "R2", "R_New", false, true, false);
+	}
+
+	public void testRenameImplicitSubRoles2() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R4", false, true, false);
+	}
+
+	// see https://svn.objectteams.org/trac/ot/ticket/79
+	public void testUpdateReferenceInTeamPackage1() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "R1" }, "T1", "T2", true, true, false);
+
+	}
+
+	public void testUpdateReferenceInTeamPackage2() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "R1", "R2" }, "T1", "T2", true, true, false);
+
+	}
+
+	public void testUpdateReferenceUsingTypeAnchor1() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testUpdateReferenceUsingTypeAnchor2() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testUpdateReferenceUsingTypeAnchor3() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testUpdateReferenceUsingTypeAnchor4() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testUpdateReferenceUsingTypeAnchor5() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2" }, "R1", "R3", false, true, false);
+	}
+
+	public void testEnclosedNestedTeamHasNewName() throws Exception {
+		performRenameRefactoring_failing(new String[] { "B" }, "B", "A", false);
+	}
+
+	public void testEnclosedRoleHasNewName() throws Exception {
+		performRenameRefactoring_failing(new String[] { "B" }, "B", "A", false);
+	}
+
+	public void testEnclosedRoleInNestedTeamHasNewName() throws Exception {
+		performRenameRefactoring_failing(new String[] { "B" }, "B", "A", false);
+	}
+
+	public void testEnclosingNestedTeamHasNewName() throws Exception {
+		performRenameRefactoring_failing(new String[] { "B" }, "A", "C", false);
+	}
+
+	public void testEnclosingTeamHasNewName() throws Exception {
+		performRenameRefactoring_failing(new String[] { "B" }, "A", "B", false);
+	}
+
+	public void testUpdatePhantomTypeReference() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2", "T3" }, "R1", "R3", false, true, false);
+	}
+
+	public void testNameConflictInSubclass() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+
+	public void testNameConflictInSuperclass() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+
+	public void testNameConflictWithRegularClass1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2", "A" }, "R1", "A", false);
+	}
+
+	public void testNameConflictWithRegularClass2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "A", "T1" }, "A", "R1", false);
+	}
+
+	public void testImplicitOverridingInSuperTeam() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T", "TSuper" }, "R", "R1", false);
+	}
+
+	public void testImplicitOverridingInSubTeam() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T", "TSub" }, "R", "R1", false);
+	}
+
+	public void testNameClashInSameTeam() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T" }, "R1", "R2", false);
+	}
+
+	public void testShadowedName1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T" }, "R1", "R2", false);
+	}
+
+	public void testShadowedName2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T" }, "R1", "R2", false);
+	}
+
+	public void testShadowedNameOfSuperType1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+
+	public void testShadowedNameOfSuperType2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+
+	public void testShadowedNameOfSubType1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+		
+	public void testNameClashWithRoleFile() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "R2" }, "R1", "R2", true);
+	}
+		
+	 public void testShadowedNameRoleFile1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "R1", "T1" }, "R1", "R2", true);
+	}
+
+	public void testShadowedNameRoleFile2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "R2" }, "R1", "R2", true);
+	}
+
+	public void testShadowedNameRoleFile3() throws Exception {
+		performRenameRefactoring_failing(new String[] { "R1", "T1", "T2" }, "R1", "R2", true);
+	}
+
+	public void testShadowedNameRoleFile5() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T2", "T1", "RT" }, "R1", "R2", true);
+	}
+
+	public void testShadowedNameRoleFile6() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T2", "T1", "R2" }, "R1", "R2", true);
+	}
+		
+	public void testImplicitOverridingWithRoleFile1() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T2", "T1", "R1" }, "R", "R1", true);
+	}
+
+	 public void testImplicitOverridingWithRoleFile2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T", "R1", "T1" }, "R", "R1", true);
+	}
+	
+	// failing
+	
+	// FIXME(jogeb): phantom roles within phantom roles wont be found by the
+	// OTTypeHierarchy or change strategy in RenameTypeAdapter
+	public void _testShadowedNameOfSubType2() throws Exception {
+		performRenameRefactoring_failing(new String[] { "T1", "T2" }, "R1", "R2", false);
+	}
+
+	public void _testShadowedNameRoleFile4() throws Exception {
+		performRenameRefactoring_failing(new String[] { "RT", "T1", "T2" }, "R1", "R2", true);
+	}
+		
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameVirtualMethodInClassTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameVirtualMethodInClassTests.java
new file mode 100644
index 0000000..1fb7482
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/rename/RenameVirtualMethodInClassTests.java
@@ -0,0 +1,283 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.rename;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodProcessor;
+import org.eclipse.jdt.internal.corext.refactoring.rename.RenameVirtualMethodProcessor;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
+
+/**
+ * @author brcan
+ * 
+ */
+public class RenameVirtualMethodInClassTests extends RefactoringTest {
+	private static final String REFACTORING_PATH = "RenameVirtualMethodInClass/";
+
+	public RenameVirtualMethodInClassTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new MySetup(new TestSuite(RenameVirtualMethodInClassTests.class));
+	}
+
+	public static Test setUpTest(Test test) {
+		return new MySetup(test);
+	}
+
+	protected String getRefactoringPath() {
+		return REFACTORING_PATH;
+	}
+
+	private RenameRefactoring createRefactoring(RenameMethodProcessor processor) {
+		return new RenameRefactoring(processor);
+	}
+
+	private RenameMethodProcessor createProcessor(IMethod method) {
+		return new RenameVirtualMethodProcessor(method);
+	}
+
+	private void performRenaming_failing(String[] cuNames, String declaringTypeName, String[] signature, boolean updateReferences) throws Exception {
+		performRenameRefactoring_failing(cuNames, declaringTypeName, "m", "k", signature, updateReferences);
+	}
+
+	private void performRenameRefactoring_failing(String[] cuNames, String declaringTypeName, String methodName, String newMethodName, String[] signatures,
+			boolean updateReferences) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		IType declaringType = getType(cus[0], declaringTypeName);
+		IMethod method = declaringType.getMethod(methodName, signatures);
+		RenameMethodProcessor processor = createProcessor(method);
+		RenameRefactoring ref = createRefactoring(processor);
+		processor.setUpdateReferences(updateReferences);
+		processor.setNewElementName(newMethodName);
+		RefactoringStatus result = performRefactoring(ref);
+
+		assertNotNull("precondition was supposed to fail!", result);
+	}
+
+	private void performRenaming_passing(String[] cuNames, String declaringTypeName) throws Exception {
+		performRenamingMtoK_passing(cuNames, declaringTypeName, true);
+	}
+
+	private void performRenamingMtoK_passing(String[] cuNames, String declaringTypeName, boolean updateReferences) throws Exception {
+		performRenameRefactoring_passing(cuNames, declaringTypeName, "m", "k", new String[0], true, updateReferences);
+	}
+
+	private void performRenameRefactoring_passing(String[] cuNames, String declaringTypeName, String methodName, String newMethodName, String[] signatures,
+			boolean shouldPass, boolean updateReferences) throws Exception {
+		ICompilationUnit[] cus = createCUs(cuNames);
+		IType declaringType = getType(cus[0], declaringTypeName);
+		IMethod method = declaringType.getMethod(methodName, signatures);
+		RenameMethodProcessor processor = createProcessor(method);
+		RenameRefactoring ref = createRefactoring(processor);
+		processor.setUpdateReferences(updateReferences);
+		processor.setNewElementName(newMethodName);
+		RefactoringStatus status = performRefactoring(ref);
+
+		assertEquals("was supposed to pass!", null, status);
+		if (!shouldPass) {
+			for (int idx = 0; idx < cus.length; idx++) {
+				assertTrue("incorrect renaming because of java model!", !getFileContents(createOutputTestFileName(cus, idx)).equals(cus[idx].getSource()));
+			}
+			return;
+		}
+
+		for (int idx = 0; idx < cus.length; idx++) {
+			String expectedRenaming = getFileContents(createOutputTestFileName(cus, idx));
+			String actualRenaming = cus[idx].getSource();
+			assertEqualLines("incorrect renaming!", expectedRenaming, actualRenaming);
+		}
+		assertTrue("anythingToUndo", RefactoringCore.getUndoManager().anythingToUndo());
+		assertTrue("! anythingToRedo", !RefactoringCore.getUndoManager().anythingToRedo());
+
+		RefactoringCore.getUndoManager().performUndo(null, new NullProgressMonitor());
+
+		for (int idx = 0; idx < cus.length; idx++) {
+			assertEqualLines("invalid undo!", getFileContents(createInputTestFileName(cus, idx)), cus[idx].getSource());
+		}
+		assertTrue("! anythingToUndo", !RefactoringCore.getUndoManager().anythingToUndo());
+		assertTrue("anythingToRedo", RefactoringCore.getUndoManager().anythingToRedo());
+
+		RefactoringCore.getUndoManager().performRedo(null, new NullProgressMonitor());
+		for (int idx = 0; idx < cus.length; idx++) {
+			assertEqualLines("invalid redo", getFileContents(createOutputTestFileName(cus, idx)), cus[idx].getSource());
+		}
+	}
+
+	private String createInputTestFileName(ICompilationUnit[] cus, int idx) {
+		return getInputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+	}
+
+	private String createOutputTestFileName(ICompilationUnit[] cus, int idx) {
+		return getOutputTestFileName(getSimpleNameOfCu(cus[idx].getElementName()));
+	}
+
+	private String getSimpleNameOfCu(String compUnit) {
+		int dot = compUnit.lastIndexOf('.');
+		return compUnit.substring(0, dot);
+	}
+
+	private ICompilationUnit[] createCUs(String[] cuNames) throws Exception {
+		ICompilationUnit[] cus = new ICompilationUnit[cuNames.length];
+
+		for (int idx = 0; idx < cuNames.length; idx++) {
+			Assert.isNotNull(cuNames[idx]);
+			cus[idx] = createCUfromTestFile(getPackageP(), cuNames[idx]);
+		}
+		return cus;
+	}
+
+	/********** tests **********/
+
+	public void testUpdateDeclarationOfOverridingRoleMethod() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInCallinBinding() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInCallinBindings1() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInCallinBindings2() throws Exception {
+		performRenaming_passing(new String[] { "B", "T1", "T2" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInCalloutBinding1() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInCalloutBinding2() throws Exception {
+		performRenameRefactoring_passing(new String[] { "B", "T" }, "B", "getAmount", "getQuantity", new String[0], true, true);
+	}
+
+	public void testUpdateReferenceToBaseMethodInExplicitlyOverriddenCalloutBinding() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceInFieldInitializationInRole() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceInFieldInitializationInTeam() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToBaseMethodInImplicitlyOverriddenCalloutBinding() throws Exception {
+		performRenaming_passing(new String[] { "B", "T1", "T2" }, "B");
+	}
+
+	public void testUpdateReferenceInRoleMethod() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceInTeamMethod() throws Exception {
+		performRenaming_passing(new String[] { "B", "T" }, "B");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethod() throws Exception {
+		performRenaming_passing(new String[] { "S", "T" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInCallinBinding() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInCallinBindings1() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInCallinBindings2() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T1", "T2" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInExplicitlyOverriddenCalloutBinding() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInImplicitlyOverriddenCalloutBinding() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T1", "T2" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInCallinBindingOfImplicitSubrole() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T1", "T2" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInCalloutBindingOfImplicitSubrole() throws Exception {
+		performRenaming_passing(new String[] { "S", "B", "T1", "T2" }, "S");
+	}
+
+	public void testUpdateReferenceToOverridingRoleMethodInTsuperCall() throws Exception {
+		performRenaming_passing(new String[] { "S", "T1", "T2" }, "S");
+	}
+
+	public void testRenamePrivateMethodInRoleclass() throws Exception {
+		performRenaming_passing(new String[] { "T" }, "R");
+	}
+
+	public void testRenamePrivateAbstractMethodInRoleclass() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T", "B" }, "R", "m1", "m3", new String[0], true, true);
+	}
+
+	public void testRenamePrivateMethodInNestedTeam() throws Exception {
+		performRenaming_passing(new String[] { "T" }, "TR");
+	}
+
+	public void testUpdateImplicitlyInheritedAndOverridingPrivateMethod1() throws Exception {
+		performRenaming_passing(new String[] { "T1", "T2" }, "R1");
+	}
+
+	public void testUpdateImplicitlyInheritedAndOverridingPrivateMethod2() throws Exception {
+		performRenaming_passing(new String[] { "T1", "T2" }, "TR1");
+	}
+
+	public void testUpdateReferenceToPrivateRoleMethodInCalloutBinding() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T1", "T2", "B" }, "R", "m1", "m3", new String[0], true, true);
+	}
+
+	public void testUpdateReferenceToPrivateRoleMethodInCallinBinding() throws Exception {
+		performRenameRefactoring_passing(new String[] { "T", "B" }, "R", "m1", "m3", new String[0], true, true);
+	}
+
+	public void testUpdateMethodToCauseAmbiguousCallinBinding1() throws Exception {
+		// performRenaming_passing(new String[] { "B", "T" }, "B");
+		performRenaming_failing(new String[] { "B", "T" }, "B", new String[0], true);
+	}
+
+	public void testUpdateMethodToCauseAmbiguousCallinBinding2() throws Exception {
+		performRenaming_failing(new String[] { "B", "T" }, "B", new String[0], true);
+	}
+
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/AllTests.java
new file mode 100644
index 0000000..e49650a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/AllTests.java
@@ -0,0 +1,53 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-Reorg Refactoring Tests");

+

+        //copy & paste, delete (cut)

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTCopyToClipboardTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTDeleteTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.PasteActionTest.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg.OTPasteActionTest.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/MockReorgQueries.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/MockReorgQueries.java
new file mode 100644
index 0000000..135ba8a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/MockReorgQueries.java
@@ -0,0 +1,70 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.runtime.OperationCanceledException;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.IConfirmQuery;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgQueries;

+

+/**

+ * @author brcan

+ */

+public class MockReorgQueries implements IReorgQueries

+{

+    private final List fQueriesRun= new ArrayList();

+

+    public IConfirmQuery createYesNoQuery(String queryTitle, boolean allowCancel, int queryID) {

+        run(queryID);

+        return yesQuery;

+    }

+

+    public IConfirmQuery createYesYesToAllNoNoToAllQuery(String queryTitle, boolean allowCancel, int queryID) {

+        run(queryID);

+        return yesQuery;

+    }

+

+    private void run(int queryID) {

+        fQueriesRun.add(new Integer(queryID));

+    }

+

+    //List<Integer>

+    public List getRunQueryIDs() {

+        return fQueriesRun;

+    }

+

+    private final IConfirmQuery yesQuery= new IConfirmQuery() {

+        public boolean confirm(String question) throws OperationCanceledException {

+            return true;

+        }

+

+        public boolean confirm(String question, Object[] elements) throws OperationCanceledException {

+            return true;

+        }

+    };

+

+    public IConfirmQuery createSkipQuery(String queryTitle, int queryID) {

+        run(queryID);

+        return yesQuery;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTCopyToClipboardTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTCopyToClipboardTests.java
new file mode 100644
index 0000000..2aa845f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTCopyToClipboardTests.java
@@ -0,0 +1,573 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/

+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+import java.util.Arrays;

+import java.util.Comparator;

+import java.util.List;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import org.eclipse.core.resources.IResource;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IField;

+import org.eclipse.jdt.core.IJavaElement;

+import org.eclipse.jdt.core.IMethod;

+import org.eclipse.jdt.core.ISourceManipulation;

+import org.eclipse.jdt.core.IType;

+import org.eclipse.jdt.core.JavaModelException;

+import org.eclipse.jdt.internal.corext.refactoring.TypedSource;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaElementTransfer;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;

+import org.eclipse.jdt.internal.corext.util.Strings;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.CopyToClipboardAction;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.TypedSourceTransfer;

+import org.eclipse.jdt.ui.JavaElementLabelProvider;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockClipboard;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;

+import org.eclipse.jface.viewers.ILabelProvider;

+import org.eclipse.swt.dnd.Clipboard;

+import org.eclipse.swt.dnd.FileTransfer;

+import org.eclipse.swt.dnd.TextTransfer;

+import org.eclipse.swt.widgets.Display;

+import org.eclipse.ui.part.ResourceTransfer;

+import org.eclipse.objectteams.otdt.core.ICallinMapping;

+import org.eclipse.objectteams.otdt.core.ICalloutMapping;

+import org.eclipse.objectteams.otdt.core.ICalloutToFieldMapping;

+import org.eclipse.objectteams.otdt.core.IMethodMapping;

+import org.eclipse.objectteams.otdt.core.IOTJavaElement;

+import org.eclipse.objectteams.otdt.core.IRoleType;

+import org.eclipse.objectteams.otdt.core.OTModelManager;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.OTRefactoringTestSetup;

+

+//{OT_COPY_PASTE: Copy of class org.eclipse.jdt.ui.tests.reorg.CopyToClipboardActionTest

+//Reason: adapt tests for the OTCopyToClipboardAction, add additional tests for OT elements

+//        remove tests which won't work with the given OT type declarations

+//		  test enumeration is kept, new OT tests are testEnabledOT0 - testEnabledOT6

+@SuppressWarnings("restriction")

+public class OTCopyToClipboardTests extends RefactoringTest

+{

+    private static final String CU_T1_NAME = "T1";

+    private static final String CU_B1_NAME = "B1";

+

+    private ILabelProvider         _labelProvider;

+    private Clipboard              _clipboard;

+    private ICompilationUnit       _cuT1;

+    private ICompilationUnit       _cuB1;

+	

+	public OTCopyToClipboardTests(String name) {

+		super(name);

+	}

+

+	public static Test suite() {

+		return new OTRefactoringTestSetup(new TestSuite(OTCopyToClipboardTests.class));

+	}

+

+	protected void setUp() throws Exception

+    {

+        super.setUp();

+        _clipboard = new MockClipboard(Display.getDefault());

+        

+        _cuT1 = createCU(getPackageP(), CU_T1_NAME + ".java", 

+                "package p;" + "\n" +

+                "import java.util.List;" + "\n" +

+                "public team class T1" + "\n" +

+                "{" + "\n" +

+                "int x;" + "\n" +

+                "public void t1m(){}" + "\n" +

+                "public team class TR1" + "\n" +

+                "{" + "\n" +

+                "public void tr1m(){}" + "\n" +

+                "public class R1 extends S1 playedBy B1" + "\n" +

+                "{" + "\n" +

+                "public abstract int rm();" + "\n" +

+                "rm -> bm;" + "\n" +

+                "sm <- after bm;" + "\n" +

+                "rm => get x;" + "\n" +

+                "}" + "\n" +

+                "}" + "\n" +

+                "}");

+

+        _cuB1 = createCU(getPackageP(), CU_B1_NAME + ".java", 

+                "package p;" + "\n" +

+                "public class B1" + "\n" +

+                "{" + "\n" +

+                "private int x;" + "\n" +

+                "public int bm(){}" + "\n" +

+                "}");

+

+        _labelProvider = new JavaElementLabelProvider(

+                JavaElementLabelProvider.SHOW_VARIABLE + 

+                JavaElementLabelProvider.SHOW_PARAMETERS + 

+                JavaElementLabelProvider.SHOW_TYPE);

+

+        assertTrue("T1.java does not exist", _cuT1.exists());

+        assertTrue("B1.java does not exist", _cuB1.exists());

+    }

+    

+    protected void tearDown() throws Exception

+    {

+        super.tearDown();

+        performDummySearch();

+        _clipboard.dispose();

+        _labelProvider.dispose();

+        delete(_cuT1);

+        delete(_cuB1);

+    }	

+	

+	private static void delete(ISourceManipulation element) {

+		try {

+			if (element != null && ((IJavaElement)element).exists())

+				element.delete(true, null);

+		} catch(JavaModelException e) {

+			//ignore, we must keep going

+		}		

+	}

+	

+	private void checkDisabled(Object[] elements){

+		CopyToClipboardAction copyAction= new CopyToClipboardAction(new MockWorkbenchSite(elements), _clipboard);

+		copyAction.setAutoRepeatOnFailure(true);

+		copyAction.update(copyAction.getSelection());

+		assertTrue("action should be disabled", ! copyAction.isEnabled());

+	}

+

+	private void checkEnabled(Object[] elements) throws Exception{

+		CopyToClipboardAction copyAction= new CopyToClipboardAction(new MockWorkbenchSite(elements), _clipboard);

+		copyAction.setAutoRepeatOnFailure(true);

+		copyAction.update(copyAction.getSelection());

+		assertTrue("action should be enabled", copyAction.isEnabled());

+		copyAction.run();

+		checkClipboard(elements);

+	}

+

+	private void checkClipboard(Object[] elementsCopied) throws Exception {

+		IResource[] resourcesCopied= getResources(elementsCopied);

+		IJavaElement[] javaElementsCopied= getJavaElements(elementsCopied);

+		IType[] mainTypesCopied= ReorgUtils.getMainTypes(javaElementsCopied);

+		

+		IResource[] resourcesExpected= computeResourcesExpectedInClipboard(resourcesCopied, mainTypesCopied, javaElementsCopied);

+		IJavaElement[] javaElementsExpected= computeJavaElementsExpectedInClipboard(javaElementsCopied, mainTypesCopied);

+		

+		String[] clipboardFiles= getClipboardFiles();

+		IResource[] clipboardResources= getClipboardResources();

+		String clipboardText= getClipboardText();

+		IJavaElement[] clipboardJavaElements= getClipboardJavaElements();

+		TypedSource[] clipboardTypedSources= getClipboardTypedSources();

+

+		checkNames(resourcesCopied, javaElementsCopied, clipboardText);

+		checkFiles(resourcesCopied, javaElementsCopied, mainTypesCopied, clipboardFiles);

+		checkTypedSources(javaElementsCopied, clipboardTypedSources);

+		checkElements(resourcesExpected, clipboardResources);

+		checkElements(javaElementsExpected, clipboardJavaElements);

+	}

+	

+	private void checkTypedSources(IJavaElement[] javaElementsCopied, TypedSource[] clipboardTypedSources) throws Exception {

+		TypedSource[] typedSources= TypedSource.createTypedSources(javaElementsCopied);

+		assertEquals("different number", typedSources.length, clipboardTypedSources.length);		

+		TypedSource.sortByType(typedSources);

+		TypedSource.sortByType(clipboardTypedSources);

+		for (int i= 0; i < typedSources.length; i++) {

+			assertEquals("different typed sources", typedSources[i], clipboardTypedSources[i]);

+		}

+	}

+

+	private IResource[] computeResourcesExpectedInClipboard(IResource[] resourcesCopied, IType[] mainTypesCopied, IJavaElement[] javaElementsCopied) throws JavaModelException {

+		IResource[] cuResources= ReorgUtils.getResources(getCompilationUnits(javaElementsCopied));

+		return ReorgUtils.union(cuResources, ReorgUtils.union(resourcesCopied, ReorgUtils.getResources(ReorgUtils.getCompilationUnits(mainTypesCopied))));

+	}

+

+	private static IJavaElement[] computeJavaElementsExpectedInClipboard(IJavaElement[] javaElementsExpected, IType[] mainTypesCopied) throws JavaModelException {

+		return ReorgUtils.union(javaElementsExpected, ReorgUtils.getCompilationUnits(mainTypesCopied));

+	}

+

+	private String getName(IResource resource){

+		return _labelProvider.getText(resource);

+	}

+	private String getName(IJavaElement javaElement){

+		return _labelProvider.getText(javaElement);

+	}

+

+	private static void checkElements(Object[] copied, Object[] retreivedFromClipboard) {

+		assertEquals("different number of elements", copied.length, retreivedFromClipboard.length);

+		sortByName(copied);

+		sortByName(retreivedFromClipboard);

+		for (int i= 0; i < retreivedFromClipboard.length; i++) {

+			Object retreived= retreivedFromClipboard[i];

+			assertTrue("element does not exist", exists(retreived));

+			assertTrue("different copied " + getName(copied[i]) + " retreived: " + getName(retreived) , copied[i].equals(retreivedFromClipboard[i]));

+		}

+	}

+

+	private static boolean exists(Object element) {

+		if (element instanceof IJavaElement)

+			return ((IJavaElement)element).exists();

+		if (element instanceof IResource)

+			return ((IResource)element).exists();

+		assertTrue(false);

+		return false;

+	}

+

+	private static String getName(Object object) {

+		if (object instanceof IJavaElement)

+			return ((IJavaElement)object).getElementName();

+		if (object instanceof IResource)

+			return ((IResource)object).getName();

+		return object == null ? null : object.toString();

+	}

+

+	private static void sortByName(Object[] copied) {

+		Arrays.sort(copied, new Comparator(){

+			public int compare(Object arg0, Object arg1) {

+				return getName(arg0).compareTo(getName(arg1));

+			}

+		});

+	}

+

+	private void checkNames(IResource[] resourcesCopied, IJavaElement[] javaElementsCopied, String clipboardText){

+		List stringLines= Arrays.asList(Strings.convertIntoLines(clipboardText));

+		assertEquals("different number of names", resourcesCopied.length + javaElementsCopied.length, stringLines.size());

+		for (int i= 0; i < resourcesCopied.length; i++) {

+			String name= getName(resourcesCopied[i]);

+			assertTrue("name not in set:" + name, stringLines.contains(name));

+		}

+		for (int i= 0; i < javaElementsCopied.length; i++) {

+			IJavaElement element= javaElementsCopied[i];

+			if (! ReorgUtils.isInsideCompilationUnit(element)){

+				String name= getName(element);

+				assertTrue("name not in set:" + name, stringLines.contains(name));				

+			}

+		}

+	}	

+	

+	private static void checkFiles(IResource[] resourcesCopied, IJavaElement[] javaElementsCopied, IType[] mainTypes, String[] clipboardFiles) {

+		int expected= 0;

+		expected += resourcesCopied.length;

+		expected += countResources(javaElementsCopied);

+		expected += mainTypes.length;

+		

+		//we cannot compare file names here because they're absolute and depend on the worspace location

+		assertEquals("different number of files in clipboard", expected, clipboardFiles.length);

+	}

+

+	private static int countResources(IJavaElement[] javaElementsCopied) {

+		int count= 0;

+		for (int i= 0; i < javaElementsCopied.length; i++) {

+			IJavaElement element= javaElementsCopied[i];

+			switch (element.getElementType()) {

+				case IJavaElement.JAVA_PROJECT :

+				case IJavaElement.PACKAGE_FRAGMENT_ROOT :

+				case IJavaElement.PACKAGE_FRAGMENT :

+				case IJavaElement.COMPILATION_UNIT :

+				case IJavaElement.CLASS_FILE :

+					count++;

+			}

+		}

+		return count;

+	}

+

+	private static IJavaElement[] getCompilationUnits(IJavaElement[] javaElements) {

+		List cus= ReorgUtils.getElementsOfType(javaElements, IJavaElement.COMPILATION_UNIT);

+		return (ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]);

+	}

+

+	private static IResource[] getResources(Object[] elements) {

+		return ReorgUtils.getResources(Arrays.asList(elements));

+	}

+

+	private static IJavaElement[] getJavaElements(Object[] elements) {

+		return ReorgUtils.getJavaElements(Arrays.asList(elements));

+	}

+

+	private IJavaElement[] getClipboardJavaElements() {

+		IJavaElement[] elements= (IJavaElement[])_clipboard.getContents(JavaElementTransfer.getInstance());

+		return elements == null ? new IJavaElement[0]: elements; 

+	}

+

+	private String[] getClipboardFiles() {

+		String[] files= (String[])_clipboard.getContents(FileTransfer.getInstance());

+		return files == null ? new String[0]: files;

+	}

+	

+	private IResource[] getClipboardResources() {

+		IResource[] resources= (IResource[])_clipboard.getContents(ResourceTransfer.getInstance());

+		return resources == null ? new IResource[0]: resources; 

+	}

+

+	private TypedSource[] getClipboardTypedSources() {

+		TypedSource[] typedSources= (TypedSource[])_clipboard.getContents(TypedSourceTransfer.getInstance());

+		return typedSources == null ? new TypedSource[0]: typedSources; 

+	}

+

+	private String getClipboardText() {

+		return (String)_clipboard.getContents(TextTransfer.getInstance());

+	}

+	

+	///---------tests

+

+	public void testDisabled0() {

+		Object[] elements= {};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled1() throws Exception {

+		Object[] elements= {null};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled2() throws Exception {

+		Object[] elements= {this};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled3() throws Exception {

+		Object[] elements= {RefactoringTestSetup.getProject(), getPackageP()};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled4() throws Exception{

+		checkDisabled(new Object[]{getPackageP(), _cuT1});

+	}

+

+	public void testDisabled5() throws Exception{

+		checkDisabled(new Object[]{getRoot(), _cuT1});

+	}

+

+	public void testDisabled12() throws Exception{

+		checkDisabled(new Object[]{getRoot().getJavaProject(), _cuT1});

+	}

+

+	public void testDisabled15() throws Exception {

+		Object fieldF= _cuT1.getType("T1").getField("x");

+		Object classA= _cuT1.getType("T1");

+		Object[] elements= {fieldF, classA};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled16() throws Exception {

+		Object fieldF= _cuT1.getType("T1").getField("x");

+		Object[] elements= {fieldF, _cuT1};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled20() throws Exception {

+		Object fieldF= _cuT1.getType("T1").getField("x");

+		Object[] elements= {fieldF, getRoot()};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled21() throws Exception {

+		Object fieldF= _cuT1.getType("T1").getField("x");

+		Object[] elements= {fieldF, RefactoringTestSetup.getProject()};

+		checkDisabled(elements);

+	}	

+

+	public void testDisabled22() throws Exception {

+		Object typeT1= _cuT1.getType("T1");

+		Object typeB1= _cuB1.getType("B1");

+		Object[] elements= {typeT1, typeB1};

+		checkDisabled(elements);

+	}

+	

+	public void testEnabled0() throws Exception {

+		Object[] elements= {RefactoringTestSetup.getProject()};

+		checkEnabled(elements);

+	}	

+

+	public void testEnabled1() throws Exception {

+		Object[] elements= {getPackageP()};

+		checkEnabled(elements);

+	}	

+

+	public void testEnabled2() throws Exception {

+		Object[] elements= {getRoot()};

+		checkEnabled(elements);

+	}	

+

+	public void testEnabled3() throws Exception {

+		Object[] elements= {RefactoringTestSetup.getDefaultSourceFolder()};

+		checkEnabled(elements);

+	}

+	

+	public void testEnabled5() throws Exception{

+		checkEnabled(new Object[]{getRoot()});

+	}

+

+	public void testEnabled6() throws Exception{

+		checkEnabled(new Object[]{_cuT1});

+	}

+

+	public void testEnabled7() throws Exception{

+		checkEnabled(new Object[]{getRoot().getJavaProject()});

+	}

+		

+	public void testEnabled8() throws Exception{

+		checkEnabled(new Object[]{getPackageP()});

+	}

+	

+	public void testEnabled10() throws Exception{

+		Object packDecl= _cuT1.getPackageDeclarations()[0];

+		Object[] elements= {packDecl};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled11() throws Exception{

+		Object importD= _cuT1.getImports()[0];

+		Object[] elements= {importD};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled12() throws Exception{

+//		printTestDisabledMessage("disabled due to bug 37750");

+//		if (true)

+//			return;

+		IJavaElement importContainer= _cuT1.getImportContainer();

+		Object[] elements= {importContainer};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled13() throws Exception{

+		Object classA= _cuT1.getType("T1");

+		Object[] elements= {classA};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled14() throws Exception{

+		Object methodT1m= _cuT1.getType("T1").getMethod("t1m", new String[0]);

+		Object[] elements= {methodT1m};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled15() throws Exception{

+		Object fieldX= _cuT1.getType("T1").getField("x");

+		Object[] elements= {fieldX};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled19() throws Exception{

+//		printTestDisabledMessage("disabled due to bug 37750");

+//		if (true)

+//			return;

+

+		Object classA= _cuT1.getType("T1");

+		Object importContainer= _cuT1.getImportContainer();

+		Object packDecl= _cuT1.getPackageDeclarations()[0];

+		Object[] elements= {classA, importContainer, packDecl};

+		checkEnabled(elements);

+	}

+

+	public void testEnabled22() throws Exception{

+//		printTestDisabledMessage("bug 39410");

+		Object classA= _cuT1.getType("T1");

+		Object packDecl= _cuT1.getPackageDeclarations()[0];

+		Object[] elements= {classA, packDecl};

+		checkEnabled(elements);

+	}

+	

+	public void testEnabledOT0() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        IMethod methodTr1m = nestedTeamTR1.getMethod("tr1m", new String[0]);

+        Object[] elements = { methodTr1m };

+        checkEnabled(elements);

+    }

+

+    public void testEnabledOT1() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        Object elem = nestedTeamTR1.getType("R1");

+        if (elem instanceof IType)

+        {

+            IType type = (IType)elem;

+            IRoleType roleR1 = (IRoleType)OTModelManager.getOTElement(type); 

+            Object[] elements = { roleR1 };

+            checkEnabled(elements);

+        }

+    }

+

+    public void testEnabledOT2() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        IType type = nestedTeamTR1.getType("R1");

+        IRoleType roleR1 = (IRoleType)OTModelManager.getOTElement(type);

+        IMethod methodRm = roleR1.getMethod("rm", new String[0]);

+        Object[] elements = { methodRm };

+        checkEnabled(elements);

+    }

+

+    public void testEnabledOT3() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        IType type = nestedTeamTR1.getType("R1");

+        IRoleType roleR1 = (IRoleType)OTModelManager.getOTElement(type);

+        IMethodMapping[] mapping = roleR1.getMethodMappings(IRoleType.CALLOUTS);

+        ICalloutMapping callout = null;

+		for (int idx = 0; idx < mapping.length; idx++)

+        {

+            if (mapping[idx].getElementType() == IOTJavaElement.CALLOUT_MAPPING)

+            {

+		        callout = (ICalloutMapping)mapping[idx];

+            }

+        }

+        Object[] elements = { callout };

+        checkEnabled(elements);

+    }

+

+    public void testEnabledOT4() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        IType type = nestedTeamTR1.getType("R1");

+        IRoleType roleR1 = (IRoleType)OTModelManager.getOTElement(type);

+        IMethodMapping[] mapping = roleR1.getMethodMappings(IRoleType.CALLINS);

+        ICallinMapping callin = (ICallinMapping)mapping[0];

+        Object[] elements = { callin };

+        checkEnabled(elements);        

+    }

+

+    public void testEnabledOT5() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        IType type = nestedTeamTR1.getType("R1");

+        IRoleType roleR1 = (IRoleType)OTModelManager.getOTElement(type);

+        IMethodMapping[] mapping = roleR1.getMethodMappings(IRoleType.CALLOUTS);

+        ICalloutToFieldMapping calloutToField = null;

+		for (int idx = 0; idx < mapping.length; idx++)

+        {

+            if (mapping[idx].getElementType() == IOTJavaElement.CALLOUT_TO_FIELD_MAPPING)

+            {

+                calloutToField = (ICalloutToFieldMapping)mapping[idx];

+            }

+        }

+        Object[] elements = { calloutToField };

+        checkEnabled(elements);        

+    }

+

+    public void testEnabledOT6() throws Exception

+    {

+        IType teamT1 = _cuT1.getType("T1");

+        IField fieldX = teamT1.getField("x");

+        IMethod methodT1m = teamT1.getMethod("t1m", new String[0]);

+        IType nestedTeamTR1 = teamT1.getType("TR1");

+        Object[] elements = { fieldX, methodT1m, nestedTeamTR1 };

+        checkEnabled(elements);

+    }

+	

+	

+}

+//sko}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTDeleteTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTDeleteTests.java
new file mode 100644
index 0000000..8c0866e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTDeleteTests.java
@@ -0,0 +1,195 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IJavaElement;

+import org.eclipse.jdt.core.IType;

+import org.eclipse.jdt.core.JavaModelException;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgQueries;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaDeleteProcessor;

+import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;

+import org.eclipse.ltk.core.refactoring.RefactoringStatus;

+import org.eclipse.ltk.core.refactoring.participants.DeleteRefactoring;

+import org.eclipse.objectteams.otdt.core.IMethodMapping;

+import org.eclipse.objectteams.otdt.core.IRoleType;

+import org.eclipse.objectteams.otdt.core.OTModelManager;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;

+

+/**

+ * @author brcan

+ */

+public class OTDeleteTests extends RefactoringTest

+{

+    private static final String REFACTORING_PATH = "Delete/";

+    private static final String CU_NAME = "T";

+    private ICompilationUnit _cuT;

+

+    public OTDeleteTests(String name)

+    {

+        super(name);

+    }

+

+    public static Test suite()

+    {

+        return new MySetup(new TestSuite(OTDeleteTests.class));

+    }

+

+    public static Test setUpTest(Test someTest)

+    {

+        return new MySetup(someTest);

+    }

+

+    protected String getRefactoringPath()

+    {

+        return REFACTORING_PATH;

+    }

+

+    private void loadFileSetup() throws Exception

+    {

+        _cuT = createCUfromTestFile(getPackageP(), CU_NAME);

+        assertTrue("T.java does not exist", _cuT.exists());

+    }

+

+    private void checkDelete(IJavaElement[] elems, boolean deleteCu)

+        throws JavaModelException, Exception

+    {

+        ICompilationUnit newCuT = null;

+        try

+        {

+            DeleteRefactoring refactoring = createRefactoring(elems);

+            assertNotNull(refactoring);

+            RefactoringStatus status = performRefactoring(refactoring, true);

+            assertEquals("precondition was supposed to pass", null, status);

+

+            newCuT = getPackageP().getCompilationUnit(CU_NAME + ".java");

+            assertTrue("T.java does not exist", newCuT.exists() == !deleteCu);

+            if (!deleteCu)

+            {

+                assertEqualLines(

+                        "incorrect content of T.java",

+                        getFileContents(getOutputTestFileName(CU_NAME)),

+                        newCuT.getSource());

+            }

+        }

+        finally

+        {

+            performDummySearch();

+            if (newCuT != null && newCuT.exists())

+            {

+                newCuT.delete(true, null);

+            }

+            if (_cuT != null && _cuT.exists())

+            {

+                _cuT.delete(true, null);

+                _cuT = null;

+            }

+        }

+    }

+

+    private DeleteRefactoring createRefactoring(Object[] elements)

+        throws CoreException

+    {

+        JavaDeleteProcessor processor = new JavaDeleteProcessor(elements);

+        DeleteRefactoring result = new DeleteRefactoring(processor);

+        processor.setQueries(createReorgQueries());

+        return result;

+    }

+

+    private IReorgQueries createReorgQueries()

+    {

+        return new MockReorgQueries();

+    }

+

+    //---- tests ----    

+    public void testDeleteTeamclass() throws Exception

+    {

+//      ParticipantTesting.reset();

+        loadFileSetup();

+        IJavaElement aTeam = _cuT.getType("T");

+        IJavaElement[] elems = new IJavaElement[] { aTeam };

+        checkDelete(elems, true);

+//      String[] handles = ParticipantTesting.createHandles(elem0);

+//      ParticipantTesting.testDelete(handles);        

+    }

+    

+    public void testDeleteNestedTeamclass() throws Exception

+    {

+        loadFileSetup();

+        IJavaElement nestedTeam = _cuT.getType("T").getType("TR");

+        IJavaElement[] elems = new IJavaElement[] { nestedTeam };

+        checkDelete(elems, false);

+    }

+

+    public void testDeleteRoleclass() throws Exception

+    {

+    	loadFileSetup();

+    	IType type = _cuT.getType("T").getType("R");

+    	IRoleType role = (IRoleType)OTModelManager.getOTElement(type); 

+    	IJavaElement[] elems = new IJavaElement[] { role };

+    	checkDelete(elems, false);

+    }

+

+    @SuppressWarnings("restriction")

+	public void testGetRoleclassName() throws Exception

+    {

+    	loadFileSetup();

+    	IType type = _cuT.getType("T").getType("R");

+    	IRoleType role = (IRoleType)OTModelManager.getOTElement(type); 

+    	String message1= ReorgUtils.getName(role);

+    	assertEquals("role 'R'", message1);

+    }

+

+    public void testDeleteCalloutMapping() throws Exception

+    {

+    	loadFileSetup();

+    	IType type = _cuT.getType("T").getType("R");

+    	IRoleType role = (IRoleType)OTModelManager.getOTElement(type); 

+    	IMethodMapping[] mappings = role.getMethodMappings(); 

+    	IJavaElement[] elems = new IJavaElement[] { mappings[0] };

+    	checkDelete(elems, false);

+    }

+

+    public void testDeleteCalloutToFieldMapping() throws Exception

+    {

+    	loadFileSetup();

+    	IType type = _cuT.getType("T").getType("R");

+    	IRoleType role = (IRoleType)OTModelManager.getOTElement(type); 

+    	IMethodMapping[] mappings = role.getMethodMappings(); 

+    	IJavaElement[] elems = new IJavaElement[] { mappings[0] };

+    	checkDelete(elems, false);

+    }

+

+    public void testDeleteCallinMapping() throws Exception

+    {

+    	loadFileSetup();

+    	IType type = _cuT.getType("T").getType("R");

+    	IRoleType role = (IRoleType)OTModelManager.getOTElement(type); 

+    	IMethodMapping[] mappings = role.getMethodMappings(); 

+    	IJavaElement[] elems = new IJavaElement[] { mappings[0] };

+    	checkDelete(elems, false);

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTPasteActionTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTPasteActionTest.java
new file mode 100644
index 0000000..9825346
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/OTPasteActionTest.java
@@ -0,0 +1,372 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/

+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+import java.io.IOException;

+import java.util.Arrays;

+import java.util.HashSet;

+import java.util.Set;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import org.eclipse.core.resources.IResource;

+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.IPackageFragment;

+import org.eclipse.jdt.core.IType;

+import org.eclipse.jdt.core.JavaModelException;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockClipboard;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.swt.dnd.Clipboard;

+import org.eclipse.swt.widgets.Display;

+import org.eclipse.objectteams.otdt.core.IMethodMapping;

+import org.eclipse.objectteams.otdt.core.IRoleType;

+import org.eclipse.objectteams.otdt.core.OTModelManager;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;

+import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.CopyToClipboardAction;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.PasteAction;

+

+

+public class OTPasteActionTest extends RefactoringTest

+{

+

+	private Clipboard _clipboard;

+	private IPackageFragment	_packageQ;

+	private static final String REFACTORING_PATH= "Paste/";

+

+	public OTPasteActionTest(String name) {

+		super(name);

+	}

+	

+	public static Test suite() {

+		return new MySetup(new TestSuite(OTPasteActionTest.class));

+	}

+

+	protected String getRefactoringPath() {

+		return REFACTORING_PATH;

+	}

+

+	protected void setUp() throws Exception {

+		super.setUp();

+		_clipboard= new MockClipboard(Display.getDefault());

+		_packageQ = MySetup.getDefaultSourceFolder().createPackageFragment("q", true, null);

+	}

+	

+	protected void tearDown() throws Exception 

+	{

+		if (_packageQ.exists())

+        {

+            _packageQ.delete(true, null);

+        }

+		_clipboard.dispose();

+		super.tearDown();

+	}

+

+	private static Object[] merge(Object[] array1, Object[] array2) {

+		Set elements= new HashSet(array1.length + array2.length);

+		elements.addAll(Arrays.asList(array1));

+		elements.addAll(Arrays.asList(array2));

+		return elements.toArray();

+	}

+	

+	private PasteAction verifyEnabled(IResource[] copySelectedResources, IJavaElement[] copySelectedJavaElements, IResource[] pasteSelectedResources, IJavaElement[] pasteSelectedJavaElements) throws JavaModelException {

+		PasteAction pasteAction= new PasteAction(new MockWorkbenchSite(merge(pasteSelectedResources, pasteSelectedJavaElements)), _clipboard);

+		CopyToClipboardAction copyToClipboardAction= new CopyToClipboardAction(new MockWorkbenchSite(merge(copySelectedResources, copySelectedJavaElements)), _clipboard);

+		copyToClipboardAction.setAutoRepeatOnFailure(true);

+		copyToClipboardAction.update(copyToClipboardAction.getSelection());

+		assertTrue("copy not enabled", copyToClipboardAction.isEnabled());

+		copyToClipboardAction.run();

+		

+		pasteAction.update(pasteAction.getSelection());

+		assertTrue("paste should be enabled", pasteAction.isEnabled());

+		return pasteAction;

+	}

+

+	private void compareContents(String cuName) throws JavaModelException, IOException {

+		assertEqualLines(cuName, getFileContents(getOutputTestFileName(cuName)), getPackageP().getCompilationUnit(cuName + ".java").getSource());

+	}

+	

+	private void delete(ICompilationUnit cu) throws Exception {

+		try {

+			performDummySearch();

+			cu.delete(true, new NullProgressMonitor());

+		} catch (JavaModelException e) {

+			e.printStackTrace();

+			//ingore and keep going

+		}

+	}

+

+	public void testPasteTeamclassIntoTeamclass() throws Exception

+	{

+		ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),

+			"TSource");

+		ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(),

+			"TDest");

+

+		try

+		{

+			IType teamTSource = cuTSource.getType("TSource");

+			IType teamTDest = cuTDest.getType("TDest");

+			

+			assertTrue("TSource does not exist", teamTSource.exists());

+			assertTrue("TDest does not exist", teamTDest.exists());

+

+			IJavaElement[] copyJavaElements = { teamTSource };

+			IResource[] copyResources = {};

+			IJavaElement[] pasteJavaElements = { teamTDest };

+			IResource[] pasteResources = {};

+			PasteAction paste = verifyEnabled(copyResources,

+					copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			

+			compareContents("TSource");

+			compareContents("TDest");

+		}

+		finally

+		{

+			delete(cuTSource);

+		}

+	}

+	

+	public void testPasteNestedTeamclass() throws Exception

+	{

+		ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),

+				"TSource");

+		ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");

+

+		try

+		{

+			IType teamTDest_TN = cuTSource.getType("TSource").getType("TN");

+			IType teamTDest = cuTDest.getType("TDest");

+

+			assertTrue("TSource.TN does not exist", teamTDest_TN.exists());

+			assertTrue("TDest does not exist", teamTDest.exists());

+

+			IJavaElement[] copyJavaElements = { teamTDest_TN };

+			IResource[] copyResources = {};

+			IJavaElement[] pasteJavaElements = { teamTDest };

+			IResource[] pasteResources = {};

+			PasteAction paste = verifyEnabled(copyResources,

+					copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		}

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+

+	public void testPasteRoleclass() throws Exception

+	{

+		ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),

+				"TSource");

+		ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");

+

+		try

+		{

+			IType roleR = cuTSource.getType("TSource").getType("R");

+			IType teamTDest = cuTDest.getType("TDest");

+

+			assertTrue("R does not exist", roleR.exists());

+			assertTrue("TDest does not exist", teamTDest.exists());

+

+			IJavaElement[] copyJavaElements = { roleR };

+			IResource[] copyResources = {};

+			IJavaElement[] pasteJavaElements = { teamTDest };

+			IResource[] pasteResources = {};

+			PasteAction paste = verifyEnabled(copyResources,

+					copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		}

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+

+	public void testPasteCalloutMapping() throws Exception

+	{

+		ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");

+		ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");

+		

+		try 

+		{

+			IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));

+			IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];

+			IType roleTDest_R = cuTDest.getType("TDest").getType("R");

+	

+			assertTrue("callout does not exist", calloutMapping.exists());

+			assertTrue("R does not exist", roleTDest_R.exists());

+	

+			IJavaElement[] copyJavaElements= {calloutMapping};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {roleTDest_R};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		} 

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+

+	public void testPasteCalloutMappingParam() throws Exception

+	{

+		ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");

+		ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");

+		

+		try 

+		{

+			IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));

+			IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];

+			IType roleTDest_R = cuTDest.getType("TDest").getType("R");

+	

+			assertTrue("callout does not exist", calloutMapping.exists());

+			assertTrue("R does not exist", roleTDest_R.exists());

+	

+			IJavaElement[] copyJavaElements= {calloutMapping};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {roleTDest_R};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		} 

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+

+	public void testPasteCallinMappingParam() throws Exception

+	{

+		ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");

+		ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");

+		

+		try 

+		{

+			IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));

+			IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];

+			IType roleTDest_R = cuTDest.getType("TDest").getType("R");

+	

+			assertTrue("callout does not exist", calloutMapping.exists());

+			assertTrue("R does not exist", roleTDest_R.exists());

+	

+			IJavaElement[] copyJavaElements= {calloutMapping};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {roleTDest_R};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		} 

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+

+	public void testPasteCalloutToFieldMapping() throws Exception

+	{

+		ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),

+				"TSource");

+		ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");

+

+		try

+		{

+			IRoleType roleSrc = (IRoleType)OTModelManager

+					.getOTElement(cuTSource.getType("TSource").getType("R"));

+			IMethodMapping calloutToFieldMapping = roleSrc.getMethodMappings()[0];

+			IType roleTDest_R = cuTDest.getType("TDest").getType("R");

+

+			assertTrue("callout does not exist", calloutToFieldMapping.exists());

+			assertTrue("R does not exist", roleTDest_R.exists());

+

+			IJavaElement[] copyJavaElements = { calloutToFieldMapping };

+			IResource[] copyResources = {};

+			IJavaElement[] pasteJavaElements = { roleTDest_R };

+			IResource[] pasteResources = {};

+			PasteAction paste = verifyEnabled(copyResources,

+					copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		}

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+	

+	public void testPasteCallinMapping() throws Exception

+	{

+		ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),

+				"TSource");

+		ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");

+

+		try

+		{

+			IRoleType roleSrc = (IRoleType)OTModelManager

+					.getOTElement(cuTSource.getType("TSource").getType("R"));

+			IMethodMapping callinMapping = roleSrc.getMethodMappings()[0];

+			IType roleTDest_R = cuTDest.getType("TDest").getType("R");

+

+			assertTrue("callout does not exist", callinMapping.exists());

+			assertTrue("R does not exist", roleTDest_R.exists());

+

+			IJavaElement[] copyJavaElements = { callinMapping };

+			IResource[] copyResources = {};

+			IJavaElement[] pasteJavaElements = { roleTDest_R };

+			IResource[] pasteResources = {};

+			PasteAction paste = verifyEnabled(copyResources,

+					copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("TSource");

+			compareContents("TDest");

+		}

+		finally

+		{

+			delete(cuTSource);

+			delete(cuTDest);

+		}

+	}

+	

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/PasteActionTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/PasteActionTest.java
new file mode 100644
index 0000000..52c607c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/reorg/PasteActionTest.java
@@ -0,0 +1,454 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/

+package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;

+

+import java.io.IOException;

+import java.util.Arrays;

+import java.util.HashSet;

+import java.util.Set;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IAdaptable;

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IField;

+import org.eclipse.jdt.core.IImportContainer;

+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.internal.corext.refactoring.TypedSource;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.CopyToClipboardAction;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.PasteAction;

+import org.eclipse.jdt.internal.ui.refactoring.reorg.TypedSourceTransfer;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;

+import org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockClipboard;

+import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;

+import org.eclipse.jface.viewers.IStructuredSelection;

+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.ui.IWorkingSet;

+import org.eclipse.ui.PlatformUI;

+

+

+public class PasteActionTest extends RefactoringTest{

+

+	private Clipboard _clipboard;

+	private static final String REFACTORING_PATH= "Paste/";

+

+	public PasteActionTest(String name) {

+		super(name);

+	}

+	

+	public static Test suite() {

+		return new RefactoringTestSetup(new TestSuite(PasteActionTest.class));

+	}

+

+	protected String getRefactoringPath() {

+		return REFACTORING_PATH;

+	}

+

+	protected void setUp() throws Exception {

+		super.setUp();

+		_clipboard= new MockClipboard(Display.getDefault());

+	}

+	protected void tearDown() throws Exception {

+		super.tearDown();

+		_clipboard.dispose();

+	}

+

+	private static Object[] merge(Object[] array1, Object[] array2) {

+		Set elements= new HashSet(array1.length + array2.length);

+		elements.addAll(Arrays.asList(array1));

+		elements.addAll(Arrays.asList(array2));

+		return elements.toArray();

+	}

+	

+	private PasteAction verifyEnabled(IResource[] copySelectedResources, IJavaElement[] copySelectedJavaElements, IResource[] pasteSelectedResources, IJavaElement[] pasteSelectedJavaElements) throws JavaModelException {

+		PasteAction pasteAction= new PasteAction(new MockWorkbenchSite(merge(pasteSelectedResources, pasteSelectedJavaElements)), _clipboard);

+		CopyToClipboardAction copyToClipboardAction= new CopyToClipboardAction(new MockWorkbenchSite(merge(copySelectedResources, copySelectedJavaElements)), _clipboard);

+		copyToClipboardAction.setAutoRepeatOnFailure(true);

+		copyToClipboardAction.update(copyToClipboardAction.getSelection());

+		assertTrue("copy not enabled", copyToClipboardAction.isEnabled());

+		copyToClipboardAction.run();

+		

+		pasteAction.update(pasteAction.getSelection());

+		assertTrue("paste should be enabled", pasteAction.isEnabled());

+		return pasteAction;

+	}

+

+	private PasteAction verifyEnabled(IResource[] copySelectedResources, IJavaElement[] copySelectedJavaElements, IWorkingSet pasteSelectedWorkingSet) throws JavaModelException {

+		PasteAction pasteAction= new PasteAction(new MockWorkbenchSite(new Object[] {pasteSelectedWorkingSet}), _clipboard);

+		CopyToClipboardAction copyToClipboardAction= new CopyToClipboardAction(new MockWorkbenchSite(merge(copySelectedResources, copySelectedJavaElements)), _clipboard);

+		copyToClipboardAction.setAutoRepeatOnFailure(true);

+		copyToClipboardAction.update(copyToClipboardAction.getSelection());

+		assertTrue("copy not enabled", copyToClipboardAction.isEnabled());

+		copyToClipboardAction.run();

+		

+		pasteAction.update(pasteAction.getSelection());

+		assertTrue("paste should be enabled", pasteAction.isEnabled());

+		return pasteAction;

+	}

+

+	public void testEnabled_javaProject() throws Exception {

+		IJavaElement[] javaElements= {RefactoringTestSetup.getProject()};

+		IResource[] resources= {};

+		verifyEnabled(resources, javaElements, new IResource[0], new IJavaElement[0]);

+	}

+

+	public void testEnabled_project() throws Exception {

+		IJavaElement[] javaElements= {};

+		IResource[] resources= {RefactoringTestSetup.getProject().getProject()};

+		verifyEnabled(resources, javaElements, new IResource[0], new IJavaElement[0]);

+	}

+	

+	public void testEnabled_workingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", new IAdaptable[] {});

+		try {

+			verifyEnabled(new IResource[0], new IJavaElement[] {RefactoringTestSetup.getProject()}, ws);

+		} finally {

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	private void compareContents(String cuName) throws JavaModelException, IOException {

+		assertEqualLines(cuName, getFileContents(getOutputTestFileName(cuName)), getPackageP().getCompilationUnit(cuName + ".java").getSource());

+	}

+	

+	private void delete(ICompilationUnit cu) throws Exception {

+		try {

+			performDummySearch();

+			cu.delete(true, new NullProgressMonitor());

+		} catch (JavaModelException e) {

+			e.printStackTrace();

+			//ingore and keep going

+		}

+	}

+

+	public void test0() throws Exception{

+		if (true) {

+			printTestDisabledMessage("not implemented yet");

+			return;

+		}

+

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");

+		

+		try {

+			IType typeA= cuA.getType("A");

+			IType typeB= cuB.getType("B");

+	

+			assertTrue("A does not exist", typeA.exists());

+			assertTrue("B does not exist", typeB.exists());

+	

+			IJavaElement[] copyJavaElements= {typeA};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {typeB};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("A");

+			compareContents("B");

+		} finally{

+			delete(cuA);

+			delete(cuB);

+		}

+	}

+

+	public void test2() throws Exception{

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");

+		

+		try {

+			IField fieldY= cuA.getType("A").getField("y");

+			IType typeB= cuB.getType("B");

+	

+			assertTrue("y does not exist", fieldY.exists());

+			assertTrue("B does not exist", typeB.exists());

+	

+			IJavaElement[] copyJavaElements= {fieldY};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {typeB};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("A");

+			compareContents("B");

+		} finally{

+			delete(cuA);

+			delete(cuB);

+		}

+	}

+

+	public void test3() throws Exception{

+//		printTestDisabledMessage("test for bug#19007");

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");

+		

+		try {

+			IJavaElement elem0= cuA.getImport("java.lang.*");

+			IImportContainer importContainer= cuB.getImportContainer();

+	

+			assertTrue("y does not exist", elem0.exists());

+			assertTrue("B does not exist", importContainer.exists());

+	

+			IJavaElement[] copyJavaElements= {elem0};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {importContainer};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("A");

+			compareContents("B");

+		} finally{

+			delete(cuA);

+			delete(cuB);

+		}

+	}

+

+	public void test4() throws Exception{

+//		printTestDisabledMessage("test for bug 20151");

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		try {

+			IJavaElement elem0= cuA.getType("A").getMethod("f", new String[0]);

+			IMethod method= cuA.getType("A").getMethod("f1", new String[0]);

+	

+			assertTrue("y does not exist", elem0.exists());

+			assertTrue("B does not exist", method.exists());

+	

+			IJavaElement[] copyJavaElements= {elem0};

+			IResource[] copyResources= {};

+			IJavaElement[] pasteJavaElements= {method};

+			IResource[] pasteResources= {};

+			PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);

+			paste.run((IStructuredSelection)paste.getSelection());

+			compareContents("A");

+		} finally{

+			delete(cuA);

+		}

+	}

+	

+	public void testPastingJavaElementIntoWorkingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", new IAdaptable[] {});

+		try {

+			IResource[] resources= {};

+			IJavaElement[] jElements= {RefactoringTestSetup.getProject()};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(RefactoringTestSetup.getProject(), ws.getElements()[0]);

+		} finally {

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	public void testPastingResourceIntoWorkingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", new IAdaptable[] {});

+		IFolder folder= RefactoringTestSetup.getProject().getProject().getFolder("folder");

+		folder.create(true, true, null);

+		try {

+			IResource[] resources= {folder};

+			IJavaElement[] jElements= {};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(folder, ws.getElements()[0]);

+		} finally {

+			performDummySearch();

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+			folder.delete(true, false, null);

+		}

+	}

+

+	public void testPastingJavaElementAsResourceIntoWorkingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", new IAdaptable[] {});

+		try {

+			IResource[] resources= {RefactoringTestSetup.getProject().getProject()};

+			IJavaElement[] jElements= {};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(RefactoringTestSetup.getProject(), ws.getElements()[0]);

+		} finally {

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	public void testPastingExistingElementIntoWorkingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", 

+			new IAdaptable[] {RefactoringTestSetup.getProject()});

+		try {

+			IResource[] resources= {};

+			IJavaElement[] jElements= {RefactoringTestSetup.getProject()};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(RefactoringTestSetup.getProject(), ws.getElements()[0]);

+		} finally {

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	public void testPastingChildJavaElementIntoWorkingSet() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", 

+			new IAdaptable[] {RefactoringTestSetup.getProject()});

+		try {

+			IResource[] resources= {};

+			IJavaElement[] jElements= {getPackageP()};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(RefactoringTestSetup.getProject(), ws.getElements()[0]);

+		} finally {

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	public void testPastingChildResourceIntoWorkingSet() throws Exception {

+		IFolder folder= RefactoringTestSetup.getProject().getProject().getFolder("folder");

+		folder.create(true, true, null);

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", 

+			new IAdaptable[] {folder});

+		IFolder sub= folder.getFolder("sub");

+		sub.create(true, true, null);

+		try {

+			IResource[] resources= {sub};

+			IJavaElement[] jElements= {};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(folder, ws.getElements()[0]);

+		} finally {

+			performDummySearch();

+			folder.delete(true, false, null);

+			sub.delete(true, false, null);

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	public void testPastingChildResourceIntoWorkingSetContainingParent() throws Exception {

+		IWorkingSet ws= PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSet("Test", 

+			new IAdaptable[] {RefactoringTestSetup.getProject()});

+		IFolder folder= RefactoringTestSetup.getProject().getProject().getFolder("folder");

+		folder.create(true, true, null);

+		try {

+			IResource[] resources= {folder};

+			IJavaElement[] jElements= {};

+			PasteAction paste= verifyEnabled(resources , jElements, ws);

+			paste.run((IStructuredSelection)paste.getSelection());

+			assertEquals("Only one element", 1, ws.getElements().length);

+			assertEquals(RefactoringTestSetup.getProject(), ws.getElements()[0]);

+		} finally {

+			performDummySearch();

+			folder.delete(true, false, null);

+			PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(ws);

+		}

+	}

+

+	private void setClipboardContents(TypedSource[] typedSources, int repeat) {

+		final int maxRepeat= 10;

+		try {

+			_clipboard.setContents(new Object[] {typedSources}, new Transfer[] {TypedSourceTransfer.getInstance()});

+		} catch (SWTError e) {

+			if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD || repeat >= maxRepeat)

+				throw e;

+			setClipboardContents(typedSources, repeat+1);

+		}

+	}

+	

+	private void copyAndPasteTypedSources(IJavaElement[] elemsForClipboard, IJavaElement[] pasteSelectedJavaElements, boolean pasteEnabled) throws CoreException {

+		setClipboardContents(TypedSource.createTypedSources(elemsForClipboard), 0);

+		PasteAction pasteAction= new PasteAction(new MockWorkbenchSite(pasteSelectedJavaElements), _clipboard);

+		pasteAction.update(pasteAction.getSelection());

+		assertEquals("action enablement", pasteEnabled, pasteAction.isEnabled());

+		if (pasteEnabled)

+			pasteAction.run((IStructuredSelection)pasteAction.getSelection());

+	}

+

+	public void testPastingTypedResources0() throws Exception {

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		try {

+			IJavaElement methodM= cuA.getType("A").getMethod("m", new String[0]);

+			IJavaElement[] elemsForClipboard= {methodM};

+			IJavaElement[] pasteSelectedJavaElements= {methodM};

+			boolean enabled= true;

+			copyAndPasteTypedSources(elemsForClipboard, pasteSelectedJavaElements, enabled);

+			compareContents("A");

+		} finally{

+			delete(cuA);

+		}

+	}

+

+	public void testPastingTypedResources1() throws Exception {

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		try {

+			IType typeA= cuA.getType("A");

+			IJavaElement fieldF= typeA.getField("f");

+			IJavaElement[] elemsForClipboard= {fieldF};

+			IJavaElement[] pasteSelectedJavaElements= {typeA};

+			boolean enabled= true;

+			copyAndPasteTypedSources(elemsForClipboard, pasteSelectedJavaElements, enabled);

+			compareContents("A");

+		} finally{

+			delete(cuA);

+		}

+	}

+

+	public void testPastingTypedResources2() throws Exception {

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		try {

+			IType typeA= cuA.getType("A");

+			IJavaElement fieldF= typeA.getField("f");

+			IJavaElement[] elemsForClipboard= {fieldF};

+			IJavaElement[] pasteSelectedJavaElements= {typeA};

+			boolean enabled= true;

+			copyAndPasteTypedSources(elemsForClipboard, pasteSelectedJavaElements, enabled);

+			compareContents("A");

+		} finally{

+			delete(cuA);

+		}

+	}

+

+	public void testPastingTypedResources3() throws Exception {

+		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");

+		try {

+			IType typeA= cuA.getType("A");

+			IJavaElement fieldF= typeA.getField("f");

+			IJavaElement fieldG= typeA.getField("g");

+			IJavaElement[] elemsForClipboard= {fieldF, fieldG};

+			IJavaElement[] pasteSelectedJavaElements= {typeA};

+			boolean enabled= true;

+			copyAndPasteTypedSources(elemsForClipboard, pasteSelectedJavaElements, enabled);

+			compareContents("A");

+		} finally{

+			delete(cuA);

+		}

+	}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/requiredfeatures/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/requiredfeatures/AllTests.java
new file mode 100644
index 0000000..394daa3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/requiredfeatures/AllTests.java
@@ -0,0 +1,56 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.requiredfeatures;

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author svacina

+ * 

+ * Runs all test cases which are needed for refactoring

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "Tests for required features");

+     

+        //TODO(jsv) test only the usage of specific components used in Refactoring Processor

+        

+        // Hierarchy

+        suite.addTest(org.eclipse.objectteams.otdt.tests.superhierarchy.AllTests.suite());

+        // TypeHelper.getInheritedMethods

+        suite.addTest(org.eclipse.objectteams.otdt.tests.otmodel.internal.TypeHelperGetInheritedMethodsTest.suite());

+        // SearchEngine

+        suite.addTest(org.eclipse.objectteams.otdt.tests.search.OTJavaMethodSearchTests.suite());

+        suite.addTest(org.eclipse.objectteams.otdt.tests.search.OTJavaTypeSearchTests.suite());

+        //TODO(jsv): add required selection tests 

+        return suite;

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/AllTests.java
new file mode 100644
index 0000000..2e3be05
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/AllTests.java
@@ -0,0 +1,49 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.util;

+

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+/**

+ * @author brcan

+ * 

+ * Runs all OT-specific refactoring tests and corresponding eclipse refactoring tests

+ */

+public class AllTests

+{

+

+    public static void main(String[] args)

+    {

+        junit.textui.TestRunner.run(AllTests.suite());

+    }

+

+    public static Test suite()

+    {

+        TestSuite suite = new TestSuite(

+                "All OT-Refactoring-Util Tests");

+

+        suite.addTest(org.eclipse.objectteams.otdt.ui.tests.refactoring.util.RefactoringUtilTest.suite());

+        

+        return suite;

+    }

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/RefactoringUtilTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/RefactoringUtilTest.java
new file mode 100644
index 0000000..0664a2e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/src/org/eclipse/objectteams/otdt/ui/tests/refactoring/util/RefactoringUtilTest.java
@@ -0,0 +1,192 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.refactoring.util;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.ui.tests.refactoring.FileBasedRefactoringTest;
+
+/**
+ * @author svacina
+ * @version $Id: RefactoringUtilTest.java 6446 2005-08-02 10:49:59Z svacina $
+ */
+public class RefactoringUtilTest extends FileBasedRefactoringTest
+{
+
+	private IType _a;
+	private IType _aa;
+	private IType _b;
+	private IType _c;
+	private IType _itest1;
+	private IType _itest2;
+	
+	private IRoleType _team1role1;
+	private IRoleType _team2role1;
+	
+	private IRoleType _team3role2;
+	private IRoleType _team4role2;
+	
+	private IMethod _team2role1m1;
+	private IMethod _team2role1m2;
+	private IMethod _itest2m1;
+	
+	private IMethod _cm1;
+	private IMethod _cm2;
+	private IMethod _team4role2m1;
+	private IMethod _team4role2m2;
+	
+	
+    public RefactoringUtilTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new Suite(RefactoringUtilTest.class);
+    }
+    
+    /**
+     * Creates a team hierarchy with implicit role type inheritance.
+     */
+    public void setUpSuite() throws Exception
+    {
+        setTestProjectDir("RefactoringUtil");
+        super.setUpSuite();
+                
+        _a = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"A");
+        
+        _aa = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"AA");
+        
+        _b = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"B");
+        
+        _c = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"C");
+        
+        _itest1 = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"ITest1");
+        
+        _itest2 = getType(getTestProjectDir(),
+        		"src",
+				"rolehierarchy1",
+				"ITest2");
+        
+        _team1role1 =
+            getRole(getTestProjectDir(),
+                "src",
+                "rolehierarchy1",
+                "Team1",
+                "Role1");
+        
+        _team2role1 =
+            getRole(getTestProjectDir(),
+                "src",
+                "rolehierarchy1",
+                "Team2",
+                "Role1");
+        
+        _team3role2 =
+            getRole(getTestProjectDir(),
+                "src",
+                "rolehierarchy1",
+                "Team3",
+                "Role2");
+        
+        _team4role2 =
+            getRole(getTestProjectDir(),
+                "src",
+                "rolehierarchy1",
+                "Team4",
+                "Role2");
+        
+        _team2role1m1 = _team2role1.getMethods()[0];
+        _team2role1m2 = _team2role1.getMethods()[1];
+        
+        _itest2m1 = _itest2.getMethods()[0];
+        
+        _cm1 = _c.getMethods()[0];
+        _cm2 = _c.getMethods()[1];
+        _team4role2m2 = _team4role2.getMethods()[1];
+        _team4role2m1 = _team4role2.getMethods()[0];
+        
+        
+        
+    }
+        
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    
+    public void testIsDeclaredInInterface_yes() throws JavaModelException
+	{
+    	fail("Not yet implemented");
+//    	MIGRATE
+//    	IMethod expected = _itest2m1;
+//    	IMethod actual = RefactoringUtil.isDeclaredInInterface(_team2role1m1, new NullProgressMonitor());
+//    	assertTrue(expected.equals(actual));
+//	}
+//    
+//    public void testIsDeclaredInInterface_no1() throws JavaModelException
+//	{
+//    	IMethod actual = RefactoringUtil.isDeclaredInInterface(_team2role1m2, new NullProgressMonitor());
+//    	assertNull(actual);
+//	}
+//    
+//    public void testIsDeclaredInInterface_no2() throws JavaModelException
+//	{
+//    	IMethod actual = RefactoringUtil.isDeclaredInInterface(_team4role2m2, new NullProgressMonitor());
+//    	assertNull(actual);
+//	}
+//    
+//    public void testOverridesAnotherMethod_yes() throws JavaModelException
+//	{
+//    	IMethod expected = _cm2;
+//    	IMethod actual = RefactoringUtil.overridesAnotherMethod(_team4role2m2, new NullProgressMonitor());
+//    	assertTrue(expected.equals(actual));
+//	}
+//    
+//    public void testOverridesAnotherMethod_no() throws JavaModelException
+//	{
+//    	IMethod actual = RefactoringUtil.overridesAnotherMethod(_team2role1m2, new NullProgressMonitor());
+//    	assertNull(actual);
+	}
+
+    //TODO(jsv) test with nested teams
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test-old.xml b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test-old.xml
new file mode 100644
index 0000000..e31030b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test-old.xml
@@ -0,0 +1,61 @@
+<project name="testsuite" default="run" basedir=".">

+

+	<property name="otdt-tests-workspace" value="${test.eclipseDir}/otdt-tests-workspace"/>

+

+	<!-- sets the properties eclipseTest-home, and library-file -->

+	<property name="plugin-name" value="org.eclipse.objectteams.otdt.ui.tests.refactoring"/>

+

+	<property name="library-file" value="${test.eclipseDir}/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="${test.eclipseDir}" includes="org.eclipse.objectteams.otdt.ui.tests.refactoring.AllTests.xml,org.eclipse.objectteams.otdt.ui.tests.refactoring.${file-id}.xml"/>

+		</delete>

+

+	</target>

+

+	<!-- This target defines the tests that need to be run. -->

+	<target name="suite">

+

+		<!-- OTDT Refactoring tests -->

+		<property name="otdt-ref-folder" 

+              value="${otdt-tests-workspace}/otdt-ref-folder"/>

+		<delete dir="${otdt-ref-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-ref-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" value="org.eclipse.objectteams.otdt.ui.tests.refactoring.AllTests"/>

+		</ant>

+

+	</target>

+

+	<target name="checkOS">

+		<condition property="os.isWindows">

+			<os family="windows"/>

+		</condition>

+	</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="${test.eclipseDir}">

+			<property name="includes" value="org.eclipse.objectteams.otdt.ui.tests.refactoring.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.${file-id}.xml"/>

+		</ant>

+

+	</target>

+

+</project>

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test.xml b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test.xml
new file mode 100644
index 0000000..6656208
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/test.xml
@@ -0,0 +1,166 @@
+<project name="testsuite" default="run" basedir=".">

+

+	<property name="otdt-tests-workspace" value="${test.eclipseDir}/otdt-tests-workspace"/>

+

+	<!-- sets the properties eclipseTest-home, and library-file -->

+	<property name="plugin-name" value="org.eclipse.objectteams.otdt.ui.tests.refactoring"/>

+

+	<!-- library.xml need these properties-->

+	<property name="eclipse-home" value="${test.eclipseDir}"/>

+	

+	<property name="library-file" value="${test.eclipseDir}/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="${test.eclipseDir}" includes="${plugin-name}.AllTests.xml,${plugin-name}..${file-id}.xml"/>

+<!--

+			<fileset dir="${test.eclipseDir}" includes="${plugin-name}.extractmethod.AllTests.xml,${plugin-name}.extractmethod.${file-id}.xml"/>

+			<fileset dir="${test.eclipseDir}" includes="${plugin-name}.move.AllTests.xml,${plugin-name}.move.${file-id}.xml"/>

+			<fileset dir="${test.eclipseDir}" includes="${plugin-name}.rename.AllTests.xml,${plugin-name}.rename.${file-id}.xml"/>

+			<fileset dir="${test.eclipseDir}" includes="${plugin-name}.reorg.AllTests.xml,${plugin-name}.reorg.${file-id}.xml"/>

+			<fileset dir="${test.eclipseDir}" includes="${plugin-name}.util.AllTests.xml,${plugin-name}.util.${file-id}.xml"/>

+-->

+		</delete>

+	</target>

+

+	<!-- This target defines the tests that need to be run. -->

+	<target name="suite">

+

+		<!-- All OTDT Refactoring tests -->

+		<property name="otdt-allrefactorings-folder" 

+              value="${otdt-tests-workspace}/otdt-allrefactorings-folder"/>

+		<delete dir="${otdt-allrefactorings-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-allrefactorings-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.AllTests"/>

+		</ant>

+

+<!--

+		<property name="otdt-extractmethod-folder" 

+              value="${otdt-tests-workspace}/otdt-extractmethod-folder"/>

+		<delete dir="${otdt-extractmethod-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-extractmethod-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.extractmethod.AllTests"/>

+		</ant>

+-->

+		<!-- OTDT Move Refactoring tests -->

+<!--

+		<property name="otdt-move-folder" 

+              value="${otdt-tests-workspace}/otdt-move-folder"/>

+		<delete dir="${otdt-move-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-move-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.move.AllTests"/>

+		</ant>

+-->

+		<!-- OTDT Rename Refactoring tests -->

+<!--

+		<property name="otdt-rename-folder" 

+              value="${otdt-tests-workspace}/otdt-rename-folder"/>

+		<delete dir="${otdt-rename-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-rename-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.rename.AllTests"/>

+		</ant>

+-->

+		

+		<!-- OTDT Reorg Refactoring tests -->

+<!--

+		<property name="otdt-reorg-folder" 

+              value="${otdt-tests-workspace}/otdt-reorg-folder"/>

+		<delete dir="${otdt-reorg-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-reorg-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.reorg.AllTests"/>

+		</ant>

+-->

+		

+		<!-- OTDT Util Refactoring tests -->

+<!--

+		<property name="otdt-util-folder" 

+              value="${otdt-tests-workspace}/otdt-util-folder"/>

+		<delete dir="${otdt-util-folder}" quiet="true"/>

+

+		<ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="data-dir" value="${otdt-util-folder}"/>

+			<property name="plugin-name" value="${plugin-name}"/>

+			<property name="classname" 

+                value="${plugin-name}.util.AllTests"/>

+		</ant>

+-->

+	</target>

+

+

+

+	<target name="checkOS">

+		<condition property="os.isWindows">

+			<os family="windows"/>

+		</condition>

+	</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="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.${file-id}.xml"/>

+		</ant>

+-->		

+<!--

+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.extractmethod.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.extractmethod.${file-id}.xml"/>

+		</ant>

+

+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.move.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.move.${file-id}.xml"/>

+		</ant>

+

+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.rename.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.rename.${file-id}.xml"/>

+		</ant>

+		

+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.reorg.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.reorg.${file-id}.xml"/>

+		</ant>

+

+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">

+			<property name="includes" value="${plugin-name}.util.AllTests.xml"/>

+			<property name="output-file" value="${plugin-name}.util.${file-id}.xml"/>

+		</ant>

+-->

+	</target>

+

+</project>

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/B.java
new file mode 100644
index 0000000..98fb71e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	public void bm(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/T.java
new file mode 100644
index 0000000..a08ffc9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public void rm(){}

+		label: rm <- after bm;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/B.java
new file mode 100644
index 0000000..98fb71e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	public void bm(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/T.java
new file mode 100644
index 0000000..510518c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCallinMapping/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public void rm(){}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/B.java
new file mode 100644
index 0000000..98fb71e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	public void bm(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/T.java
new file mode 100644
index 0000000..82ffeee
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public abstract void rm();

+		/** This callout has a javadoc comment. */

+		rm -> bm;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/B.java
new file mode 100644
index 0000000..98fb71e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	public void bm(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/T.java
new file mode 100644
index 0000000..a9d9e41
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutMapping/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public abstract void rm();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/B.java
new file mode 100644
index 0000000..2edab0f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	private int f;

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/T.java
new file mode 100644
index 0000000..64feb79
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public abstract int rm();

+		rm -> get f;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/B.java
new file mode 100644
index 0000000..2edab0f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/B.java
@@ -0,0 +1,6 @@
+package p;

+

+public class B

+{

+	private int f;

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/T.java
new file mode 100644
index 0000000..68111ff
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteCalloutToFieldMapping/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T

+{

+	public class R playedBy B

+	{

+		public abstract int rm();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/in/T.java
new file mode 100644
index 0000000..403cd8f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/in/T.java
@@ -0,0 +1,8 @@
+package p;

+

+public team class T

+{

+	public team class TR

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/out/T.java
new file mode 100644
index 0000000..7655e94
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteNestedTeamclass/out/T.java
@@ -0,0 +1,5 @@
+package p;

+

+public team class T

+{

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/in/T.java
new file mode 100644
index 0000000..0ff3f9e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/in/T.java
@@ -0,0 +1,8 @@
+package p;

+

+public team class T

+{

+	public class R

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/out/T.java
new file mode 100644
index 0000000..7655e94
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteRoleclass/out/T.java
@@ -0,0 +1,5 @@
+package p;

+

+public team class T

+{

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/in/T.java
new file mode 100644
index 0000000..7655e94
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/in/T.java
@@ -0,0 +1,5 @@
+package p;

+

+public team class T

+{

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/out/T.java
new file mode 100644
index 0000000..b23b2d9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testDeleteTeamclass/out/T.java
@@ -0,0 +1 @@
+package p;
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testGetRoleclassName/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testGetRoleclassName/in/T.java
new file mode 100644
index 0000000..0ff3f9e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/Delete/testGetRoleclassName/in/T.java
@@ -0,0 +1,8 @@
+package p;

+

+public team class T

+{

+	public class R

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/B.java
new file mode 100644
index 0000000..cf9c60e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+		n(i);

+		base_m();

+	}

+

+	private void n(int j)

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/B.java
new file mode 100644
index 0000000..a609a64
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/B.java
@@ -0,0 +1,16 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+		base_m();

+	}

+

+	private void n(int j)

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/T.java
new file mode 100644
index 0000000..2a9ed85
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameter/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		private void m(int j)

+		{

+		}

+

+		void m(int j) <- before void m(int i);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/B.java
new file mode 100644
index 0000000..fde01eb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m(int i, int x)

+	{

+		n(x + 1);

+		base_m();

+	}

+

+	private void n(int j)

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/B.java
new file mode 100644
index 0000000..1a4630b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/B.java
@@ -0,0 +1,16 @@
+package p;

+

+public class B{

+	public void m(int i, int x)

+	{

+		base_m();

+	}

+

+	private void n(int j)

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/T.java
new file mode 100644
index 0000000..f261988
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractCallinWithParameterMapping/out/T.java
@@ -0,0 +1,15 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		private void m(int j)

+		{

+		}

+

+		void m(int j) <- before void m(int i, int x) with

+		{

+			j <- x + 1

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/B.java
new file mode 100644
index 0000000..68bd192
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+		n();

+	}

+

+	private void n()

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/B.java
new file mode 100644
index 0000000..244abb2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/B.java
@@ -0,0 +1,16 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+	}

+

+	private void n()

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/T.java
new file mode 100644
index 0000000..cd64628
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleAfterCallin/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		private void m()

+		{

+		}

+

+		void m() <- after void m();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/B.java
new file mode 100644
index 0000000..25c8041
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		n();

+		base_m();

+	}

+

+	private void n()

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/B.java
new file mode 100644
index 0000000..244abb2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/B.java
@@ -0,0 +1,16 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+	}

+

+	private void n()

+	{

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/T.java
new file mode 100644
index 0000000..5871013
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleBeforeCallin/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		private void m()

+		{

+		}

+

+		void m() <- before void m();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/T.java
new file mode 100644
index 0000000..9f3f128
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin1/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		callin void m(){}

+

+		void m() <- replace void m();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/in/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/T.java
new file mode 100644
index 0000000..a2b3bf7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractCallin/testExtractSimpleReplaceCallin2/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+

+		callin void m(){base.m();}

+

+		void m() <- replace void m();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/A.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/A.java
new file mode 100644
index 0000000..b12359f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/A.java
@@ -0,0 +1,11 @@
+package focusType_in;

+

+public class A

+{

+	public void f1(String s, int x)

+	{

+		/*[*/f2(s,x);/*]*/

+	}

+	public void f2(String s, int x){}

+	public void extracted(String str){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/B.java
new file mode 100644
index 0000000..c2fa83f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/B.java
@@ -0,0 +1,10 @@
+package focusType_in;

+

+public class B extends A

+{

+	public void g1(int x)

+	{

+		/*[*/g2(x);/*]*/

+	}

+	public void g2(int x){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/C.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/C.java
new file mode 100644
index 0000000..af82182
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/C.java
@@ -0,0 +1,13 @@
+package focusType_in;

+

+public class C extends B

+{

+	public void h1(int x, int y)

+	{

+		/*[*/int a, b;

+			 a = x;

+			 b = y;

+			 h2(a, b);/*]*/

+	}

+	public void h2(int a, int b){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam1.java
new file mode 100644
index 0000000..2e2df4a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam1.java
@@ -0,0 +1,11 @@
+package focusType_in;

+

+public team class FocusTeam1

+{

+	public void m1()

+	{

+		/*[*/m2();/*]*/

+	}

+	public void m2(){}

+	public void extracted(String str){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam2.java
new file mode 100644
index 0000000..3c8983c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam2.java
@@ -0,0 +1,10 @@
+package focusType_in;

+

+public team class FocusTeam2 extends FocusTeam1

+{

+	public void m1()

+	{

+		/*[*/m2();/*]*/

+	}

+	public void m2(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam3.java
new file mode 100644
index 0000000..a49470e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/FocusTeam3.java
@@ -0,0 +1,10 @@
+package focusType_in;

+

+public team class FocusTeam3 extends FocusTeam2

+{

+	public void m1()

+	{

+		/*[*/m2();/*]*/

+	}	

+	public void m2(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T1.java
new file mode 100644
index 0000000..d1fd1cd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T1.java
@@ -0,0 +1,19 @@
+package focusType_in;

+

+public team class T1

+{

+    public class R1 playedBy C

+    {

+        protected abstract void n(String s);

+        

+    	public void m1()

+    	{

+    		/*[*/m2();/*]*/

+    	}

+    	public void m2(){}

+		public void extracted(String str){}

+        

+        extracted <- after f1;

+        		n -> extracted;

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T2.java
new file mode 100644
index 0000000..ac26b94
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T2.java
@@ -0,0 +1,16 @@
+package focusType_in;

+

+public team class T2 extends T1

+{

+    public class R1 playedBy C

+    {

+    	public void m1()

+    	{

+    		/*[*/m2();/*]*/

+    	}

+    	public void m2(){}

+        

+        extracted <- after f2;

+        		n => extracted;

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T3.java
new file mode 100644
index 0000000..8272879
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/focusType_in/T3.java
@@ -0,0 +1,16 @@
+package focusType_in;

+

+public team class T3 extends T2

+{

+    public class R1 playedBy C

+    {

+    	public void m1()

+    	{

+    		/*[*/m2();/*]*/

+    	}

+    	public void m2(){}

+        

+        extracted <- after f2;

+        		n => extracted;        

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam3.java
new file mode 100644
index 0000000..b109d3b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam3.java
@@ -0,0 +1,11 @@
+package nestedTeam_in;

+

+public class B_testNestedTeam3

+{

+    public void m1(int x)

+    {

+        /*[*/m2(x);/*]*/

+    }

+    private void m2(int x){}

+    public void extracted(){}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam4.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam4.java
new file mode 100644
index 0000000..d646f6a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam4.java
@@ -0,0 +1,6 @@
+package nestedTeam_in;

+

+public class B_testNestedTeam4

+{

+    public void m(){}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam5.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam5.java
new file mode 100644
index 0000000..279af48
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam5.java
@@ -0,0 +1,11 @@
+package nestedTeam_in;

+

+public class B_testNestedTeam5

+{

+    public void m1(int x)

+    {

+        /*[*/m2(x);/*]*/

+    }

+    private void m2(int x){}

+    public void extracted(){}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam6.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam6.java
new file mode 100644
index 0000000..5613a64
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/B_testNestedTeam6.java
@@ -0,0 +1,6 @@
+package nestedTeam_in;

+

+public class B_testNestedTeam6

+{

+    public void m(){}

+}

diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam1.java
new file mode 100644
index 0000000..1193d40
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam1.java
@@ -0,0 +1,14 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam1

+{

+	public team class NestedTeam

+	{

+		public void foo()

+		{

+			/*[*/bar();/*]*/

+		}

+

+		public void bar(){}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam2.java
new file mode 100644
index 0000000..7d2ef43
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam2.java
@@ -0,0 +1,17 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam2

+{

+	public team class NestedTeam

+	{

+		public class InnerRole

+		{

+			public void foo()

+			{

+				/*[*/bar();/*]*/

+			}

+

+			public void bar(){}

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam3.java
new file mode 100644
index 0000000..8e6c355
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam3.java
@@ -0,0 +1,15 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam3

+{

+    public team class NestedTeam playedBy B_testNestedTeam3

+    {

+        public void foo()

+    	{

+            bar();

+    	}

+    	public abstract void bar();

+    	

+    	bar -> extracted;

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam4.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam4.java
new file mode 100644
index 0000000..edc5c00
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam4.java
@@ -0,0 +1,16 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam4

+{

+    public team class NestedTeam playedBy B_testNestedTeam4

+    {

+        public void foo(String str)

+    	{

+            /*[*/bar(str);/*]*/

+    	}

+        public void bar(String str){}

+    	public void extracted(){}

+    	

+    	extracted <- before m;

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam5.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam5.java
new file mode 100644
index 0000000..8574582
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam5.java
@@ -0,0 +1,18 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam5

+{

+    public team class NestedTeam

+    {

+        public class InnerRole playedBy B_testNestedTeam5

+        {

+            public void foo()

+        	{

+                bar();

+        	}

+        	public abstract void bar();

+        	

+        	bar -> extracted;

+        }

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam6.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam6.java
new file mode 100644
index 0000000..315e1f1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_in/T1_testNestedTeam6.java
@@ -0,0 +1,19 @@
+package nestedTeam_in;

+

+public team class T1_testNestedTeam6

+{

+    public team class NestedTeam

+    {

+        public class InnerRole playedBy B_testNestedTeam6

+        {

+	        public void foo(String str)

+	    	{

+	            /*[*/bar(str);/*]*/

+	    	}

+	        public void bar(String str){}

+	    	public void extracted(){}

+	    	

+	    	extracted <- before m;

+        }

+    }

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam1.java
new file mode 100644
index 0000000..8a65add
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam1.java
@@ -0,0 +1,19 @@
+package nestedTeam_out;

+

+public team class T1_testNestedTeam1

+{

+	public team class NestedTeam

+	{

+		public void foo()

+		{

+			extracted();

+		}

+

+		protected void extracted()

+		{

+			/*[*/bar();/*]*/

+		}

+

+		public void bar(){}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam2.java
new file mode 100644
index 0000000..a4a3db3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/nestedTeam_out/T1_testNestedTeam2.java
@@ -0,0 +1,22 @@
+package nestedTeam_out;

+

+public team class T1_testNestedTeam2

+{

+	public team class NestedTeam

+	{

+		public class InnerRole

+		{

+			public void foo()

+			{

+				extracted();

+			}

+

+			protected void extracted()

+			{

+				/*[*/bar();/*]*/

+			}

+

+			public void bar(){}

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test20.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test20.java
new file mode 100644
index 0000000..29cd0ab
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test20.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test20

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test21.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test21.java
new file mode 100644
index 0000000..78fb6e0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test21.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test21

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test22.java
new file mode 100644
index 0000000..cf32730
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test22.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test22

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test23.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test23.java
new file mode 100644
index 0000000..b99fcc9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test23.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test23

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test24.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test24.java
new file mode 100644
index 0000000..8c92132
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test24.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test24

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test25.java
new file mode 100644
index 0000000..ede8b96
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/A_test25.java
@@ -0,0 +1,19 @@
+package overloading_in;

+

+public class A_test25

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test20.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test20.java
new file mode 100644
index 0000000..75b0064
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test20.java
@@ -0,0 +1,6 @@
+package overloading_in;

+

+public class B_test20 extends A_test20

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test21.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test21.java
new file mode 100644
index 0000000..aeb8a6e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test21.java
@@ -0,0 +1,6 @@
+package overloading_in;

+

+public class B_test21 extends A_test21

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test22.java
new file mode 100644
index 0000000..831af51
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/B_test22.java
@@ -0,0 +1,6 @@
+package overloading_in;

+

+public class B_test22 extends A_test22

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test20.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test20.java
new file mode 100644
index 0000000..bfccf89
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test20.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public class Base1_test20

+{

+	public void baseMethod(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test21.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test21.java
new file mode 100644
index 0000000..427401c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test21.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public class Base1_test21

+{

+	public void baseMethod(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test22.java
new file mode 100644
index 0000000..f0d6bd1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test22.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public class Base1_test22

+{

+	public void baseMethod(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test24.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test24.java
new file mode 100644
index 0000000..ec32d49
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test24.java
@@ -0,0 +1,6 @@
+package overloading_in;

+

+public class Base1_test24 extends A_test24

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test25.java
new file mode 100644
index 0000000..4137522
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Base1_test25.java
@@ -0,0 +1,6 @@
+package overloading_in;

+

+public class Base1_test25 extends A_test25

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test20.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test20.java
new file mode 100644
index 0000000..e62d4ff
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test20.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public team class Team1_test20

+{

+	public class Role1_test20 extends B_test20 playedBy Base1_test20 

+	{

+		extracted <- after baseMethod;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test21.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test21.java
new file mode 100644
index 0000000..22174a3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test21.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public team class Team1_test21

+{

+	public class Role1_test21 extends B_test21 

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test22.java
new file mode 100644
index 0000000..172f6a5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test22.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public team class Team1_test22

+{

+	public class Role1_test22 extends B_test22 

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test23.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test23.java
new file mode 100644
index 0000000..ae200fd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test23.java
@@ -0,0 +1,14 @@
+package overloading_in;

+

+public team class Team1_test23

+{

+	public class Role1_test23 playedBy A_test23

+	{

+		public void foo(String str)

+		{

+

+		}

+		

+		foo <- after extracted;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test24.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test24.java
new file mode 100644
index 0000000..fb1a20f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test24.java
@@ -0,0 +1,14 @@
+package overloading_in;

+

+public team class Team1_test24

+{

+	public class Role1_test24 playedBy Base1_test24

+	{

+		public foo(String str)

+		{

+

+		}

+		

+		foo <- after extracted;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test25.java
new file mode 100644
index 0000000..2baee76
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team1_test25.java
@@ -0,0 +1,14 @@
+package overloading_in;

+

+public team class Team1_test25

+{

+	public class Role1_test25 playedBy Base1_test25

+	{

+		public foo(String str)

+		{

+

+		}

+		

+		void foo(String str) <- after void extracted(String str);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test21.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test21.java
new file mode 100644
index 0000000..bee855b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test21.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public team class Team2_test21 extends Team1_test21

+{

+	public class Role1_test21 playedBy Base1_test21 

+	{

+		extracted <- after baseMethod;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test22.java
new file mode 100644
index 0000000..7dd0def
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_in/Team2_test22.java
@@ -0,0 +1,9 @@
+package overloading_in;

+

+public team class Team2_test21 extends Team1_test21

+{

+	public class Role1_test22 playedBy Base1_test22 

+	{

+		extracted(String str) <- after baseMethod(String str);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test22.java
new file mode 100644
index 0000000..5cb3cd0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test22.java
@@ -0,0 +1,24 @@
+package overloading_out;

+

+public class A_test22

+{

+	public void foo()

+	{

+		extracted();

+	}

+

+	protected void extracted()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test25.java
new file mode 100644
index 0000000..fcf1049
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/A_test25.java
@@ -0,0 +1,24 @@
+package overloading_out;

+

+public class A_test25

+{

+	public void foo()

+	{

+		extracted();

+	}

+

+	protected void extracted()

+	{

+		/*[*/bar();/*]*/

+	}

+

+	public void bar()

+	{

+

+	}

+

+	public void extracted(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/B_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/B_test22.java
new file mode 100644
index 0000000..5f498ac
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/B_test22.java
@@ -0,0 +1,6 @@
+package overloading_out;

+

+public class B_test22 extends A_test22

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test22.java
new file mode 100644
index 0000000..2beef97
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test22.java
@@ -0,0 +1,9 @@
+package overloading_out;

+

+public class Base1_test22

+{

+	public void baseMethod(String str)

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test25.java
new file mode 100644
index 0000000..054cf33
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Base1_test25.java
@@ -0,0 +1,6 @@
+package overloading_out;

+

+public class Base1_test25 extends A_test25

+{

+

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test22.java
new file mode 100644
index 0000000..c7941fe
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test22.java
@@ -0,0 +1,9 @@
+package overloading_out;

+

+public team class Team1_test21

+{

+	public class Role1_test22 extends B_test22 

+	{

+

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test25.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test25.java
new file mode 100644
index 0000000..0b92f3b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team1_test25.java
@@ -0,0 +1,14 @@
+package overloading_out;

+

+public team class Team1_test25

+{

+	public class Role1_test25 playedBy Base1_test25

+	{

+		public foo(String str)

+		{

+

+		}

+		

+		foo <- after extracted;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team2_test22.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team2_test22.java
new file mode 100644
index 0000000..d9418cf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/overloading_out/Team2_test22.java
@@ -0,0 +1,9 @@
+package overloading_out;

+

+public team class Team2_test21 extends Team1_test21

+{

+	public class Role1_test22 playedBy Base1_test22 

+	{

+		extracted(String str) <- after baseMethod(String str);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile.java
new file mode 100644
index 0000000..fc4e2d8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile.java
@@ -0,0 +1,6 @@
+package roleFile_in;
+
+public team class TeamWithRoleFile
+{
+
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile1.java
new file mode 100644
index 0000000..01385d6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile1.java
@@ -0,0 +1,11 @@
+team package roleFile_in.TeamWithRoleFile;
+
+public class R_testRoleFile1
+{
+	public void foo()
+	{
+		/*[*/bar();/*]*/
+	}
+
+	public void bar(){}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile2.java
new file mode 100644
index 0000000..9678035
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_in/TeamWithRoleFile/R_testRoleFile2.java
@@ -0,0 +1,16 @@
+team package roleFile_in.TeamWithRoleFile;
+
+public class R_testRoleFile2
+{
+	private int a, b, c;
+
+	public void foo()
+	{
+		/*[*/c = a + b;/*]*/
+	}
+
+	public void bar()
+	{
+		c = a + b;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile.java
new file mode 100644
index 0000000..6ed460a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile.java
@@ -0,0 +1,6 @@
+package role_out;
+
+public team class TeamWithRoleFile
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile1.java
new file mode 100644
index 0000000..c64ac37
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile1.java
@@ -0,0 +1,16 @@
+team package roleFile_out.TeamWithRoleFile;
+
+public class R_testRoleFile1
+{
+	public void foo()
+	{
+		extracted();
+	}
+
+	protected void extracted()
+	{
+		/*[*/bar();/*]*/
+	}
+
+	public void bar(){}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile2.java
new file mode 100644
index 0000000..3d207e7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/roleFile_out/TeamWithRoleFile/R_testRoleFile2.java
@@ -0,0 +1,21 @@
+team package roleFile_out.TeamWithRoleFile;
+
+public class R_testRoleFile2
+{
+	private int a, b, c;
+
+	public void foo()
+	{
+		extracted();
+	}
+
+	protected void extracted()
+	{
+		/*[*/c = a + b;/*]*/
+	}
+
+	public void bar()
+	{
+		c = a + b;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass1.java
new file mode 100644
index 0000000..06b7ea3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass1.java
@@ -0,0 +1,14 @@
+package role_in;

+

+public team class T_testRoleclass1

+{

+	public class R

+	{

+		public void foo()

+		{

+			/*[*/bar();/*]*/

+		}

+

+		public void bar(){}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass2.java
new file mode 100644
index 0000000..bd868b1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_in/T_testRoleclass2.java
@@ -0,0 +1,19 @@
+package role_in;

+

+public team class T_testRoleclass2

+{

+	public class R

+	{

+		private int a, b, c;

+

+		public void foo()

+		{

+			/*[*/c = a + b;/*]*/

+		}

+

+		public void bar()

+		{

+			c = a + b;

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass1.java
new file mode 100644
index 0000000..305e618
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass1.java
@@ -0,0 +1,19 @@
+package role_out;

+

+public team class T_testRoleclass1

+{

+	public class R

+	{

+		public void foo()

+		{

+			extracted();

+		}

+

+		protected void extracted()

+		{

+			/*[*/bar();/*]*/

+		}

+

+		public void bar(){}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass2.java
new file mode 100644
index 0000000..7afb312
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/role_out/T_testRoleclass2.java
@@ -0,0 +1,24 @@
+package role_out;

+

+public team class T_testRoleclass2

+{

+	public class R

+	{

+		private int a, b, c;

+

+		public void foo()

+		{

+			extracted();

+		}

+

+		protected void extracted()

+		{

+			/*[*/c = a + b;/*]*/

+		}

+

+		public void bar()

+		{

+			c = a + b;

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass1.java
new file mode 100644
index 0000000..2daa1ff
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass1.java
@@ -0,0 +1,10 @@
+package team_in;

+

+public team class T_testTeamclass1

+{

+	public void foo()

+	{

+		/*[*/bar();/*]*/

+	}

+	public void bar(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass2.java
new file mode 100644
index 0000000..3ef3314
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_in/T_testTeamclass2.java
@@ -0,0 +1,11 @@
+package team_in;

+

+public team class T_testTeamclass2

+{

+	private int a, b, c;

+	

+	public void foo()

+	{

+		/*[*/c = a + b;/*]*/

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass1.java
new file mode 100644
index 0000000..db8485d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass1.java
@@ -0,0 +1,14 @@
+package team_out;

+

+public team class T_testTeamclass1

+{

+	public void foo()

+	{

+		extracted();

+	}

+	protected void extracted()

+	{

+		/*[*/bar();/*]*/

+	}

+	public void bar(){}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass2.java
new file mode 100644
index 0000000..5b3ab58
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractMethod/team_out/T_testTeamclass2.java
@@ -0,0 +1,16 @@
+package team_out;

+

+public team class T_testTeamclass2

+{

+	private int a, b, c;

+	

+	public void foo()

+	{

+		extracted();

+	}

+

+	protected void extracted()

+	{

+		/*[*/c = a + b;/*]*/

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor1.java
new file mode 100644
index 0000000..24c766d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor1.java
@@ -0,0 +1,17 @@
+package statements_in; // 15, 13, 15, 18
+public team class T_testTypeAnchor1 {
+	public final InnerTeam it;
+	T_testTypeAnchor1()
+	{
+		it = new InnerTeam();
+	}
+	public team class InnerTeam {
+		public class R1 {
+			
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor1 t1 = new T_testTypeAnchor1();
+		R1<@t1.it> r1 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor2.java
new file mode 100644
index 0000000..a7a6620
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor2.java
@@ -0,0 +1,23 @@
+package statements_in; // 21, 13, 21, 20
+public team class T_testTypeAnchor2 {
+	public final R0 r;
+	T_testTypeAnchor2()
+	{
+		r = new R0(new InnerTeam());
+	}
+	public class R0 {
+		public final InnerTeam it;
+		R0(InnerTeam it) {
+			this.it = it;
+		}
+	}
+	public team class InnerTeam {
+		public class R1 {
+			
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor2 t1 = new T_testTypeAnchor2();
+		R1<@t1.r.it> r1 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor3.java
new file mode 100644
index 0000000..1d7afb0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testTypeAnchor3.java
@@ -0,0 +1,21 @@
+package statements_in; // 19, 13, 19, 20
+public team class T_testTypeAnchor2 {
+	public final R0 r;
+	T_testTypeAnchor2()
+	{
+		r = new R0();
+	}
+	public team class R0 {
+		public final R1 r1;
+		R0() {
+			this.it = it;
+		}
+		public team class R1 {
+			public class R2 {}
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor2 t1 = new T_testTypeAnchor2();
+		R2<@t1.r.r1> r2 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin1.java
new file mode 100644
index 0000000..d27a855
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin1.java
@@ -0,0 +1,15 @@
+package statements_in; // 9,16 - 9, 35
+/**
+ * @author stephan
+ *
+ */
+public team class T_testWithin1 {
+	public static void main(String[] args) {
+		int i = 7;
+		within(new T_testWithin1()) {
+			System.out.println("within1");
+		}
+		System.err.println("after");
+	}
+}
+ 
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin2.java
new file mode 100644
index 0000000..adb87f5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_in/T_testWithin2.java
@@ -0,0 +1,14 @@
+package statements_in; // 9,16 - 9, 35
+/**
+ * @author stephan
+ *
+ */
+public team class T_testWithin2 {
+	public static void main(String[] args) {
+		int i = 7;
+		within(new T_testWithin2())
+			System.out.println("within2");
+		System.err.println("after");
+	}
+}
+ 
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor1.java
new file mode 100644
index 0000000..c56724d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor1.java
@@ -0,0 +1,18 @@
+package statements; // 15, 13, 15, 18
+public team class T_testTypeAnchor1 {
+	public final InnerTeam it;
+	T_testTypeAnchor1()
+	{
+		it = new InnerTeam();
+	}
+	public team class InnerTeam {
+		public class R1 {
+			
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor1 t1 = new T_testTypeAnchor1();
+		final InnerTeam<@t1> extracted=t1.it;
+		R1<@extracted> r1 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor2.java
new file mode 100644
index 0000000..07ddd1d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor2.java
@@ -0,0 +1,24 @@
+package statements_out; // 21, 13, 21, 20
+public team class T_testTypeAnchor2 {
+	public final R0 r;
+	T_testTypeAnchor2()
+	{
+		r = new R0(new InnerTeam());
+	}
+	public class R0 {
+		public final InnerTeam it;
+		R0(InnerTeam it) {
+			this.it = it;
+		}
+	}
+	public team class InnerTeam {
+		public class R1 {
+			
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor2 t1 = new T_testTypeAnchor2();
+		final InnerTeam extracted = t1.r.it;
+		R1<@extracted> r1 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor3.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor3.java
new file mode 100644
index 0000000..44e2582
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testTypeAnchor3.java
@@ -0,0 +1,22 @@
+package statements_out; // 19, 13, 19, 20
+public team class T_testTypeAnchor2 {
+	public final R0 r;
+	T_testTypeAnchor2()
+	{
+		r = new R0();
+	}
+	public team class R0 {
+		public final R1 r1;
+		R0() {
+			this.it = it;
+		}
+		public team class R1 {
+			public class R2 {}
+		}		
+	}
+	public static void main(String[] args) {
+		final T_testTypeAnchor2 t1 = new T_testTypeAnchor2();
+		final R1<@t1.r> extracted=t1.r.r1;
+		R2<@extracted> r2 = null;
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin1.java
new file mode 100644
index 0000000..4e8db4f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin1.java
@@ -0,0 +1,16 @@
+package statements_out; // 9,16 - 9, 35
+/**
+ * @author stephan
+ *
+ */
+public team class T_testWithin1 {
+	public static void main(String[] args) {
+		int i = 7;
+		T_testWithin1 extracted = new T_testWithin1();
+		within(extracted) {
+			System.out.println("within1");
+		}
+		System.err.println("after");
+	}
+}
+ 
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin2.java
new file mode 100644
index 0000000..1fa9988
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/ExtractTemp/statements_out/T_testWithin2.java
@@ -0,0 +1,15 @@
+package statements_out; // 9,16 - 9, 35
+/**
+ * @author stephan
+ *
+ */
+public team class T_testWithin2 {
+	public static void main(String[] args) {
+		int i = 7;
+		T_testWithin2 extracted = new T_testWithin2();
+		within(extracted)
+			System.out.println("within2");
+		System.err.println("after");
+	}
+}
+ 
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/B.java
new file mode 100644
index 0000000..fd30e05
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/B.java
@@ -0,0 +1,8 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/T.java
new file mode 100644
index 0000000..af7713f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/in/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		protected void n(){

+		}

+		n <- after m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/B.java
new file mode 100644
index 0000000..f857c12
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/B.java
@@ -0,0 +1,19 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		int baseResult = base_m();

+		n();

+		return baseResult;

+	}

+

+	private void n()

+	{

+	}

+

+	public int base_m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/T.java
new file mode 100644
index 0000000..9fa60fb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testAfterCallinWithReturn/out/T.java
@@ -0,0 +1,8 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		protected void n(){

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/B.java
new file mode 100644
index 0000000..779358c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+	public void m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/T.java
new file mode 100644
index 0000000..47b7bbb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+		void n() <- after void m();

+		void n() <- after void m(int i);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/B.java
new file mode 100644
index 0000000..205da57
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+		n();

+	}

+	private void n()

+	{

+	}

+	public void base_m()

+	{

+	}

+	public void m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/T.java
new file mode 100644
index 0000000..24a136c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testCallinMappingWithSignature/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+		void n() <- after void m(int i);

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/T.java
new file mode 100644
index 0000000..28d4f7d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteReferencedRoleMethod/in/T.java
@@ -0,0 +1,14 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		private void o(){

+			n();

+		}

+		

+		private void n(){

+		}

+		n <- before m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/T.java
new file mode 100644
index 0000000..42e5e13
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/B.java
new file mode 100644
index 0000000..aa764ac
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		n();

+	}

+

+	private void n()

+	{

+		base_m();

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/T.java
new file mode 100644
index 0000000..92a33cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDeleteRoleMethod/out/T.java
@@ -0,0 +1,6 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/T.java
new file mode 100644
index 0000000..65bb902
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole1/in/T.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+			other();

+		}

+		n <- before m;

+		

+		private void other(){

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/T.java
new file mode 100644
index 0000000..e9df038
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDependencyToRole2/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		private int f;

+		public void n(){

+			f = 5;

+		}

+		n <- before m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/B.java
new file mode 100644
index 0000000..1ee2906
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int i, String s)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/T.java
new file mode 100644
index 0000000..fd9157a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int j){

+			int v = j;

+			base.n(j);

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/B.java
new file mode 100644
index 0000000..5f19372
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public void m(int i, String s)

+	{

+		n(i, s);

+	}

+

+	private void n(int j, String s)

+	{

+		int v = j;

+		base_m(j, s);

+	}

+

+	public void base_m(int i, String s)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/T.java
new file mode 100644
index 0000000..d66fa75
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamLength/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int j){

+			int v = j;

+			base.n(j);

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/B.java
new file mode 100644
index 0000000..4ebd5c3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/T.java
new file mode 100644
index 0000000..fd9157a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int j){

+			int v = j;

+			base.n(j);

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/B.java
new file mode 100644
index 0000000..0a87f2d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+		n(i);

+	}

+

+	private void n(int j)

+	{

+		int v = j;

+		base_m(j);

+	}

+

+	public void base_m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/T.java
new file mode 100644
index 0000000..d66fa75
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testDifferentParamNames/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int j){

+			int v = j;

+			base.n(j);

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T1.java
new file mode 100644
index 0000000..3701a6e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T1.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T1{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T2.java
new file mode 100644
index 0000000..27cc748
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin1/in/T2.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T2{

+	

+	T1 team1 = new Team1();

+	

+	protected class R playedBy R<@team1>{

+		callin void n(){

+			base.n();

+		}

+		n <- replace n;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T1.java
new file mode 100644
index 0000000..3701a6e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T1.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T1{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T2.java
new file mode 100644
index 0000000..b3a0563
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineBoundCallin2/in/T2.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T2{

+	

+	T1 team1 = new Team1();

+	

+	protected class R playedBy R<@team1>{	

+		void n() -> void n();

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/B.java
new file mode 100644
index 0000000..40330f0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	public void m1()

+	{

+	}

+	public void m2()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/T.java
new file mode 100644
index 0000000..39b6aee
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/in/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+		n <- after m1,m2;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/B.java
new file mode 100644
index 0000000..3a5b24c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/B.java
@@ -0,0 +1,23 @@
+package p;

+

+public class B{

+	public void m1()

+	{

+		base_m1();

+		n();

+	}

+	private void n()

+	{

+	}

+	public void base_m1()

+	{

+	}

+	public void m2()

+	{

+		base_m2();

+		n();

+	}

+	public void base_m2()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/T.java
new file mode 100644
index 0000000..600c0a9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testInlineMultipleCallins/out/T.java
@@ -0,0 +1,8 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/B.java
new file mode 100644
index 0000000..3902235
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+	public void m2()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/T.java
new file mode 100644
index 0000000..4012a6a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/in/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+		n <- after m,m2;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/B.java
new file mode 100644
index 0000000..6f11091
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+		n();

+	}

+	private void n()

+	{

+	}

+	public void base_m()

+	{

+	}

+	public void m2()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/T.java
new file mode 100644
index 0000000..f48b788
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testMultipleBaseMethodCallin/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		public void n(){

+		}

+		n <- after m2;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/B.java
new file mode 100644
index 0000000..4ebd5c3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/T.java
new file mode 100644
index 0000000..42e5e13
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/B.java
new file mode 100644
index 0000000..d76f77e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+		n(i);

+	}

+

+	private void n(int i)

+	{

+		base_m(i);

+	}

+

+	public void base_m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/T.java
new file mode 100644
index 0000000..6ae4f36
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling1/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/B.java
new file mode 100644
index 0000000..4ebd5c3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/T.java
new file mode 100644
index 0000000..1e8f9dd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			int i;

+			base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/B.java
new file mode 100644
index 0000000..8da1929
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public void m(int i)

+	{

+		n(i);

+	}

+

+	private void n(int i2)

+	{

+		int i;

+		base_m(i2);

+	}

+

+	public void base_m(int i)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/T.java
new file mode 100644
index 0000000..2e3c6e7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testParameterTunneling2/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			int i;

+			base.n();

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/B.java
new file mode 100644
index 0000000..fd30e05
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/B.java
@@ -0,0 +1,8 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/T.java
new file mode 100644
index 0000000..d7f2bb9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+			int i = 1;

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/B.java
new file mode 100644
index 0000000..ea6bf7b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/B.java
@@ -0,0 +1,21 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return n();

+	}

+

+	private int n()

+	{

+		int baseResult;

+		baseResult = base_m();

+		int i = 1;

+		return baseResult;

+	}

+

+	public int base_m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/T.java
new file mode 100644
index 0000000..bf3e975
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling1/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+			int i = 1;

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/B.java
new file mode 100644
index 0000000..fd30e05
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/B.java
@@ -0,0 +1,8 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/T.java
new file mode 100644
index 0000000..9635554
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/in/T.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+			int i = 1;

+		}

+		void n() <- replace int m() with{

+			5 -> result

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/B.java
new file mode 100644
index 0000000..acee00a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/B.java
@@ -0,0 +1,20 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return n();

+	}

+

+	private int n()

+	{

+		base_m();

+		int i = 1;

+		return 5;

+	}

+

+	public int base_m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/T.java
new file mode 100644
index 0000000..bf3e975
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinResultTunneling2/out/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			base.n();

+			int i = 1;

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/B.java
new file mode 100644
index 0000000..2c0bdfc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/T.java
new file mode 100644
index 0000000..4da59af
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/in/T.java
@@ -0,0 +1,17 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			if(true){

+				base.n();

+				return;

+			}else{

+				base.n();

+				return;

+			}

+			return;

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/B.java
new file mode 100644
index 0000000..00c13d2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/B.java
@@ -0,0 +1,24 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		n();

+	}

+

+	private void n()

+	{

+		if (true) {

+			base_m();

+			return;

+		} else {

+			base_m();

+			return;

+		}

+		return;

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/T.java
new file mode 100644
index 0000000..f503502
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithMultipleReturns/out/T.java
@@ -0,0 +1,16 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(){

+			if(true){

+				base.n();

+				return;

+			}else{

+				base.n();

+				return;

+			}

+			return;

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/B.java
new file mode 100644
index 0000000..1ee2906
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int i, String s)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/T.java
new file mode 100644
index 0000000..f1bb289
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int i, String s){

+			base.n(i, s);

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/B.java
new file mode 100644
index 0000000..1e36403
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m(int i, String s)

+	{

+		n(i, s);

+	}

+

+	private void n(int i, String s)

+	{

+		base_m(i, s);

+	}

+

+	public void base_m(int i, String s)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/T.java
new file mode 100644
index 0000000..aff236b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithParameter/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int i, String s){

+			base.n(i, s);

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/B.java
new file mode 100644
index 0000000..fd30e05
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/B.java
@@ -0,0 +1,8 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/T.java
new file mode 100644
index 0000000..21d7884
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/in/T.java
@@ -0,0 +1,10 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin int n(){

+			return base.n();

+		}

+		n <- replace m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/B.java
new file mode 100644
index 0000000..a86c12f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/B.java
@@ -0,0 +1,18 @@
+package p;

+

+public class B{

+	public int m()

+	{

+		return n();

+	}

+

+	private int n()

+	{

+		return base_m();

+	}

+

+	public int base_m()

+	{

+		return 1;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/T.java
new file mode 100644
index 0000000..169c6de
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceCallinWithReturn/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin int n(){

+			return base.n();

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/B.java
new file mode 100644
index 0000000..44890c7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/B.java
@@ -0,0 +1,7 @@
+package p;

+

+public class B{

+	public void m(int j, int k)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/T.java
new file mode 100644
index 0000000..eb6209c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/in/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int i){

+			base.n(i);

+		}

+		void n(int x) <- replace void m(int y, int z) with{

+			x <- z

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/B.java
new file mode 100644
index 0000000..9c24904
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/B.java
@@ -0,0 +1,17 @@
+package p;

+

+public class B{

+	public void m(int j, int k)

+	{

+		n(k, tunneledJ);

+	}

+

+	private void n(int i, int tunneledJ)

+	{

+		base_m(tunneledJ, i);

+	}

+

+	public void base_m(int j, int k)

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/T.java
new file mode 100644
index 0000000..5668b62
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testReplaceWithParameterMapping/out/T.java
@@ -0,0 +1,9 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		callin void n(int i){

+			base.n(i);

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/B.java
new file mode 100644
index 0000000..05e6ad8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	public void m()

+	{

+	}

+	

+	public void v(){

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/T.java
new file mode 100644
index 0000000..6d4bd56
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/in/T.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		void calloutV() -> void v();

+		

+		protected void n(){

+			calloutV();

+		}

+		n <- after m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/B.java
new file mode 100644
index 0000000..f9f96ed
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/B.java
@@ -0,0 +1,21 @@
+package p;

+

+public class B{

+	public void m()

+	{

+		base_m();

+		n();

+	}

+

+	private void n()

+	{

+		v();

+	}

+

+	public void base_m()

+	{

+	}

+	

+	public void v(){

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/T.java
new file mode 100644
index 0000000..077f84e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCallout/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		void calloutV() -> void v();

+		

+		protected void n(){

+			calloutV();

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/B.java
new file mode 100644
index 0000000..bc10ba3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	

+	private int f = 1;

+	

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/T.java
new file mode 100644
index 0000000..7fae228
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/in/T.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		int getF() -> get int f;

+		

+		protected void n(){

+			int g = getF();

+		}

+		n <- after m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/B.java
new file mode 100644
index 0000000..14c5415
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/B.java
@@ -0,0 +1,21 @@
+package p;

+

+public class B{

+	

+	private int f = 1;

+	

+	public void m()

+	{

+		base_m();

+		n();

+	}

+

+	private void n()

+	{

+		int g = f;

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/T.java
new file mode 100644
index 0000000..622201d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldGet/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		int getF() -> get int f;

+		

+		protected void n(){

+			int g = getF();

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/B.java
new file mode 100644
index 0000000..e664af5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/B.java
@@ -0,0 +1,10 @@
+package p;

+

+public class B{

+	

+	private int f;

+	

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/T.java
new file mode 100644
index 0000000..5206abe
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/in/T.java
@@ -0,0 +1,13 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		int setF(int i) -> set int f;

+		

+		protected void n(){

+			setF(1);

+		}

+		n <- after m;

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/B.java
new file mode 100644
index 0000000..6fcaff3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/B.java
@@ -0,0 +1,21 @@
+package p;

+

+public class B{

+	

+	private int f;

+	

+	public void m()

+	{

+		base_m();

+		n();

+	}

+

+	private void n()

+	{

+		f = 1;

+	}

+

+	public void base_m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/T.java
new file mode 100644
index 0000000..462752e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testRoleMethodReferencesCalloutToFieldSet/out/T.java
@@ -0,0 +1,12 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		

+		int setF(int i) -> set int f;

+		

+		protected void n(){

+			setF(1);

+		}

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/B.java
new file mode 100644
index 0000000..dcba9d3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/B.java
@@ -0,0 +1,8 @@
+package p;

+

+public class B{

+	// comment for method m()

+	public void m()

+	{

+	}

+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/T.java
new file mode 100644
index 0000000..2239dc9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/InlineCallin/testSimpleAfterCallin/in/T.java
@@ -0,0 +1,11 @@
+package p;

+

+public team class T{

+	protected class R playedBy B{

+		// comment for method n

+		public void n(){

+		}

+		// This is the long comment describing this callin.

+		n <- after m;

+	}