diff options
Diffstat (limited to 'testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring')
10 files changed, 141 insertions, 61 deletions
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 index 1e169f339..803f37c4e 100644 --- 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 @@ -20,50 +20,52 @@ **********************************************************************/
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;
-
+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.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; +import org.eclipse.objectteams.otdt.core.IOTJavaElement; +import org.eclipse.objectteams.otdt.internal.core.AbstractCalloutMapping; +
+@SuppressWarnings("restriction") public abstract class RefactoringTest extends TestCase
{
private IPackageFragmentRoot _root;
@@ -496,7 +498,7 @@ public abstract class RefactoringTest extends TestCase {
return new IField[0];
}
- Set fields = new HashSet();
+ Set<IField> fields = new HashSet<IField>();
for (int i = 0; i < names.length; i++)
{
IField field = type.getField(names[i]);
@@ -504,7 +506,7 @@ public abstract class RefactoringTest extends TestCase field.exists());
fields.add(field);
}
- return (IField[])fields.toArray(new IField[fields.size()]);
+ return fields.toArray(new IField[fields.size()]);
}
public static IType[] getMemberTypes(IType type, String[] names)
@@ -514,7 +516,7 @@ public abstract class RefactoringTest extends TestCase {
return new IType[0];
}
- Set memberTypes = new HashSet();
+ Set<IType> memberTypes = new HashSet<IType>();
for (int i = 0; i < names.length; i++)
{
IType memberType = type.getType(names[i]);
@@ -522,20 +524,42 @@ public abstract class RefactoringTest extends TestCase + " does not exist", memberType.exists());
memberTypes.add(memberType);
}
- return (IType[])memberTypes.toArray(new IType[memberTypes.size()]);
+ return memberTypes.toArray(new IType[memberTypes.size()]);
}
public static IMethod[] getMethods(IType type, String[] names,
String[][] signatures) throws JavaModelException
+ { + return getMethods(type, names, signatures, null, false); + } + public static IMethod[] getMethods(IType type, String[] names, String[][] signatures, + boolean[] flags, boolean flag) + throws JavaModelException {
if (names == null || signatures == null)
{
return new IMethod[0];
}
- List methods = new ArrayList(names.length);
+ List<IMethod> methods = new ArrayList<IMethod>(names.length);
for (int i = 0; i < names.length; i++)
- {
- IMethod method = type.getMethod(names[i], signatures[i]);
+ { + // use flags to filter sub-set of names/signatures: + if (flags != null && flags[i] != flag) continue; +
+ IMethod method = type.getMethod(names[i], signatures[i]); + if (!method.exists()) { + // search a callout mapping that might be "equal" to this method: + for (IJavaElement child : type.getChildren()) { + int elementType = child.getElementType(); + if (elementType == IOTJavaElement.CALLOUT_MAPPING || elementType == IOTJavaElement.CALLOUT_TO_FIELD_MAPPING) { + AbstractCalloutMapping map = (AbstractCalloutMapping) child; + if (method.equals(map.getCorrespondingJavaElement())) { + method = map; + break; + } + } + } + }
assertTrue("method " + method.getElementName() + " does not exist",
method.exists());
if (!methods.contains(method))
@@ -543,12 +567,12 @@ public abstract class RefactoringTest extends TestCase methods.add(method);
}
}
- return (IMethod[])methods.toArray(new IMethod[methods.size()]);
+ return methods.toArray(new IMethod[methods.size()]);
}
public static IType[] findTypes(IType[] types, String[] namesOfTypesToPullUp)
{
- List found = new ArrayList(types.length);
+ List<IType> found = new ArrayList<IType>(types.length);
for (int i = 0; i < types.length; i++)
{
IType type = types[i];
@@ -561,13 +585,13 @@ public abstract class RefactoringTest extends TestCase }
}
}
- return (IType[])found.toArray(new IType[found.size()]);
+ return found.toArray(new IType[found.size()]);
}
public static IField[] findFields(IField[] fields,
String[] namesOfFieldsToPullUp)
{
- List found = new ArrayList(fields.length);
+ List<IField> found = new ArrayList<IField>(fields.length);
for (int i = 0; i < fields.length; i++)
{
IField field = fields[i];
@@ -580,13 +604,13 @@ public abstract class RefactoringTest extends TestCase }
}
}
- return (IField[])found.toArray(new IField[found.size()]);
+ return found.toArray(new IField[found.size()]);
}
public static IMethod[] findMethods(IMethod[] selectedMethods,
String[] namesOfMethods, String[][] signaturesOfMethods)
{
- List found = new ArrayList(selectedMethods.length);
+ List<IMethod> found = new ArrayList<IMethod>(selectedMethods.length);
for (int i = 0; i < selectedMethods.length; i++)
{
IMethod method = selectedMethods[i];
@@ -606,7 +630,7 @@ public abstract class RefactoringTest extends TestCase found.add(method);
}
}
- return (IMethod[])found.toArray(new IMethod[found.size()]);
+ return found.toArray(new IMethod[found.size()]);
}
private static boolean areSameSignatures(String[] s1, String[] s2)
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 index 0c1ada317..947c724d3 100644 --- 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 @@ -129,15 +129,21 @@ public class PullUpTests extends RefactoringTest { */ private void performPullUp_pass(String[] cuNames, String[] methodNames, String[][] signatures, String[] fieldNames, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods, int targetClassIndex, String nameOfDeclaringType) throws Exception { + performPullUp_pass(cuNames, methodNames, signatures, null, fieldNames, deleteAllInSourceType, deleteAllMatchingMethods, targetClassIndex, nameOfDeclaringType); + } + private void performPullUp_pass(String[] cuNames, String[] methodNames, String[][] signatures, boolean[] makeAbstract, 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); + IMethod[] methods = getMethods(declaringType, methodNames, signatures, makeAbstract, false); IField[] fields = getFields(declaringType, fieldNames); IMember[] members = merge(methods, fields); PullUpRefactoringProcessor processor = createRefactoringProcessor(members); + if (makeAbstract != null) + processor.setAbstractMethods(getMethods(declaringType, methodNames, signatures, makeAbstract, true)); Refactoring ref = processor.getRefactoring(); assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK()); @@ -329,7 +335,16 @@ public class PullUpTests extends RefactoringTest { } // Bug 374841 - [refactoring] pull up does not work among (nested) roles - public void testPullUpWithReferenceToCallout() throws Exception { - performPullUp_pass(new String[] {"T", "B"}, new String[]{"foo"}, new String[][] { new String[0] }, new String[0], true, true, 0, "RSub"); + public void testPullUpWithReferenceToCallout1() throws Exception { + // without pull-up of getS1/getS2 we cannot succeed: + performPullUp_failing(new String[] {"T", "B"}, new String[]{"foo"}, new String[][] { new String[0] }, new String[0], true, true, 0, "RSub"); + } + // Bug 386587 - [refactoring] pull-up refactoring cannot handle callout bindings + public void testPullUpWithReferenceToCallout2() throws Exception { + performPullUp_pass(new String[] {"T", "B"}, + new String[]{"foo", "getS1", "getS2"}, + new String[][] { new String[0], new String[0], new String[0] }, + new boolean[] {false, true, true}, + new String[0], true, true, 0, "RSub"); } } diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/in/B.java index 2f8b9309b..2f8b9309b 100644 --- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/in/B.java +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/in/B.java diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/in/T.java index b2af6c4fc..b2af6c4fc 100644 --- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/in/T.java +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/in/T.java diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/out/B.java index 2f8b9309b..2f8b9309b 100644 --- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/out/B.java +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/out/B.java diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/out/T.java index f4ec07e3e..f4ec07e3e 100644 --- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout/out/T.java +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout1/out/T.java diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/B.java new file mode 100644 index 000000000..2f8b9309b --- /dev/null +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/B.java @@ -0,0 +1,4 @@ +public class B { + String s; + String getS() { return s; } +}
\ No newline at end of file diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/T.java new file mode 100644 index 000000000..b2af6c4fc --- /dev/null +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/in/T.java @@ -0,0 +1,13 @@ +public team class T { + protected class RSuper { + + } + protected class RSub extends RSuper playedBy B { + String getS1() -> get String s; + String getS2() -> String getS(); + void foo() + { + System.out.println(getS1()+getS2()); + } + } +}
\ No newline at end of file diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/B.java new file mode 100644 index 000000000..2f8b9309b --- /dev/null +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/B.java @@ -0,0 +1,4 @@ +public class B { + String s; + String getS() { return s; } +}
\ No newline at end of file diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/T.java new file mode 100644 index 000000000..3779040ab --- /dev/null +++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.refactoring/testdata/PullUp/testPullUpWithReferenceToCallout2/out/T.java @@ -0,0 +1,20 @@ +public team class T { + protected abstract class RSuper { + + protected abstract String getS2(); + + protected abstract String getS1(); + + void foo() + { + System.out.println(getS1()+getS2()); + } + + } + protected class RSub extends RSuper playedBy B { + @Override + protected String getS1() -> get String s; + @Override + protected String getS2() -> String getS(); + } +}
\ No newline at end of file |