diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveElementsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveElementsTests.java index eec97ac..8ecb0b9 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveElementsTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveElementsTests.java @@ -2452,7 +2452,7 @@ try { TestProgressMonitor monitor = TestProgressMonitor.getInstance(); monitor.setCancelledCounter(1); - movePositive(typeSource.getMethods(), new IJavaElement[] {typeDest}, null, null, false, monitor); + movePositive(typeSource.getMethods(), new IJavaElement[] {typeDest}, null, null, false, true, monitor); } catch (OperationCanceledException e) { isCanceled = true; } @@ -2488,7 +2488,7 @@ try { TestProgressMonitor monitor = TestProgressMonitor.getInstance(); monitor.setCancelledCounter(1); - movePositive(typeSource.getMethods(), new IJavaElement[] {typeDest}, null, null, false, monitor); + movePositive(typeSource.getMethods(), new IJavaElement[] {typeDest}, null, null, false, true, monitor); } catch (OperationCanceledException e) { isCanceled = true; } diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveResourcesTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveResourcesTests.java index 3d4d1ec..2b68fd0 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveResourcesTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveResourcesTests.java @@ -80,7 +80,13 @@ } IJavaElementDelta destDelta = this.deltaListener.getDeltaFor(container, true); assertTrue("Destination container not changed", destDelta != null && destDelta.getKind() == IJavaElementDelta.CHANGED); - IJavaElementDelta[] deltas = destDelta.getAddedChildren(); + IJavaElementDelta[] deltas = null; + if (force) { + deltas = destDelta.getChangedChildren(); + } + else { + deltas = destDelta.getAddedChildren(); + } // FIXME: not strong enough boolean found = false; for (int i = 0; i < deltas.length; i++) { @@ -809,25 +815,38 @@ * existing CU. */ public void testMoveCU03() throws CoreException { - this.createFolder("/P/src/p1"); - this.createFile( - "/P/src/p1/X.java", - "package p1;\n" + - "public class X {\n" + - "}" - ); - ICompilationUnit cuSource = getCompilationUnit("/P/src/p1/X.java"); + try { + this.createFolder("/P/src/p1"); + this.createFile( + "/P/src/p1/X.java", + "package p1;\n" + + "public class X {\n" + + "}" + ); + ICompilationUnit cuSource = getCompilationUnit("/P/src/p1/X.java"); - this.createFolder("/P/src/p2"); - this.createFile( - "/P/src/p2/X.java", - "package p2;\n" + - "public class X {\n" + - "}" - ); - IPackageFragment pkgDest = getPackage("/P/src/p2"); - - movePositive(cuSource, pkgDest, null, null, true); + this.createFolder("/P/src/p2"); + this.createFile( + "/P/src/p2/X.java", + "package p2;\n" + + "public class X {\n" + + "}" + ); + IPackageFragment pkgDest = getPackage("/P/src/p2"); + startDeltas(); + movePositive(new IJavaElement[] {cuSource}, new IJavaElement[] {pkgDest}, null, null, true, false, null); + assertDeltas( + "Incorrect delta", + "P[*]: {CHILDREN}\n" + + " src[*]: {CHILDREN}\n" + + " p1[*]: {CHILDREN}\n" + + " X.java[-]: {MOVED_TO(X.java [in p2 [in src [in P]]])}\n" + + " p2[*]: {CHILDREN}\n" + + " X.java[*]: {CONTENT | PRIMARY RESOURCE}"); + } + finally { + stopDeltas(); + } } /** * Ensures that a CU can be moved to a different package, @@ -853,25 +872,39 @@ * be renamed, overwriting an existing resource. */ public void testMoveCU05() throws CoreException { - this.createFolder("/P/src/p1"); - this.createFile( - "/P/src/p1/X.java", - "package p1;\n" + - "public class X {\n" + - "}" - ); - ICompilationUnit cuSource = getCompilationUnit("/P/src/p1/X.java"); + try { + this.createFolder("/P/src/p1"); + this.createFile( + "/P/src/p1/X.java", + "package p1;\n" + + "public class X {\n" + + "}" + ); + ICompilationUnit cuSource = getCompilationUnit("/P/src/p1/X.java"); - this.createFolder("/P/src/p2"); - this.createFile( - "/P/src/p2/Y.java", - "package p2;\n" + - "public class Y {\n" + - "}" - ); - IPackageFragment pkgDest = getPackage("/P/src/p2"); - - movePositive(cuSource, pkgDest, null, "Y.java", true); + this.createFolder("/P/src/p2"); + this.createFile( + "/P/src/p2/Y.java", + "package p2;\n" + + "public class Y {\n" + + "}" + ); + IPackageFragment pkgDest = getPackage("/P/src/p2"); + startDeltas(); + movePositive(new IJavaElement[] {cuSource}, new IJavaElement[] {pkgDest}, null, new String[]{"Y.java"}, true, false, null); + assertDeltas( + "Incorrect delta", + "P[*]: {CHILDREN}\n" + + " src[*]: {CHILDREN}\n" + + " p1[*]: {CHILDREN}\n" + + " X.java[-]: {MOVED_TO(Y.java [in p2 [in src [in P]]])}\n" + + " p2[*]: {CHILDREN}\n" + + " Y.java[*]: {CHILDREN | FINE GRAINED | PRIMARY RESOURCE}\n" + + " Y[+]: {MOVED_FROM(X [in X.java [in p1 [in src [in P]]]])}"); + } + finally { + stopDeltas(); + } } /** * Ensures that a CU cannot be moved to a different package, replacing an diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveTests.java index b1066ae..c03e393 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveTests.java @@ -253,12 +253,15 @@ public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, IJavaElement[] siblings, String[] names, boolean force) throws JavaModelException { movePositive(elements, destinations, siblings, names, force, null); } +public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, IJavaElement[] siblings, String[] names, boolean force, IProgressMonitor monitor) throws JavaModelException { + movePositive(elements, destinations, siblings, names, force, true, null); +} /** * Moves the elements to the containers with optional renaming * and forcing. The operation should succeed, so any exceptions * encountered are thrown. */ -public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, IJavaElement[] siblings, String[] names, boolean force, IProgressMonitor monitor) throws JavaModelException { +public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, IJavaElement[] siblings, String[] names, boolean force, boolean checkDelta, IProgressMonitor monitor) throws JavaModelException { // if forcing, ensure that a name collision exists int i; if (force) { @@ -275,7 +278,7 @@ } try { - startDeltas(); + if(checkDelta) startDeltas(); // move getJavaModel().move(elements, destinations, siblings, names, force, monitor); @@ -341,24 +344,26 @@ } } } - IJavaElementDelta destDelta = null; - if (isMainType(element, destinations[i]) && names != null && names[i] != null) { //moved/renamed main type to same cu - destDelta = this.deltaListener.getDeltaFor(moved.getParent()); - assertTrue("Renamed compilation unit as result of main type not added", destDelta != null && destDelta.getKind() == IJavaElementDelta.ADDED); - assertTrue("flag should be F_MOVED_FROM", (destDelta.getFlags() & IJavaElementDelta.F_MOVED_FROM) > 0); - assertTrue("moved from handle should be original", destDelta.getMovedFromElement().equals(element.getParent())); - } else { - destDelta = this.deltaListener.getDeltaFor(destinations[i], true); - assertTrue("Destination container not changed", destDelta != null && destDelta.getKind() == IJavaElementDelta.CHANGED); - IJavaElementDelta[] deltas = destDelta.getAddedChildren(); - assertTrue("Added children not correct for element copy", deltas[i].getElement().equals(moved)); - assertTrue("should be K_ADDED", deltas[i].getKind() == IJavaElementDelta.ADDED); - IJavaElementDelta sourceDelta= this.deltaListener.getDeltaFor(element, false); - assertTrue("should be K_REMOVED", sourceDelta.getKind() == IJavaElementDelta.REMOVED); + if(checkDelta) { + IJavaElementDelta destDelta = null; + if (isMainType(element, destinations[i]) && names != null && names[i] != null) { //moved/renamed main type to same cu + destDelta = this.deltaListener.getDeltaFor(moved.getParent()); + assertTrue("Renamed compilation unit as result of main type not added", destDelta != null && destDelta.getKind() == IJavaElementDelta.ADDED); + assertTrue("flag should be F_MOVED_FROM", (destDelta.getFlags() & IJavaElementDelta.F_MOVED_FROM) > 0); + assertTrue("moved from handle should be original", destDelta.getMovedFromElement().equals(element.getParent())); + } else { + destDelta = this.deltaListener.getDeltaFor(destinations[i], true); + assertTrue("Destination container not changed", destDelta != null && destDelta.getKind() == IJavaElementDelta.CHANGED); + IJavaElementDelta[] deltas = destDelta.getAddedChildren(); + assertTrue("Added children not correct for element copy", deltas[i].getElement().equals(moved)); + assertTrue("should be K_ADDED", deltas[i].getKind() == IJavaElementDelta.ADDED); + IJavaElementDelta sourceDelta= this.deltaListener.getDeltaFor(element, false); + assertTrue("should be K_REMOVED", sourceDelta.getKind() == IJavaElementDelta.REMOVED); + } } } } finally { - stopDeltas(); + if(checkDelta) stopDeltas(); } } } diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RenameTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RenameTests.java index f08ed7a..92b80fa 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RenameTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RenameTests.java @@ -115,9 +115,9 @@ assertTrue("moved from handle should be original", destDelta.getMovedFromElement().equals(e.getParent())); } else { assertTrue("Destination container not changed", destDelta != null && deltaChildrenChanged(destDelta)); - IJavaElementDelta[] deltas = destDelta.getAddedChildren(); + IJavaElementDelta[] deltas = force ? destDelta.getChangedChildren() : destDelta.getAddedChildren(); assertTrue("Added children not correct for element rename", deltas.length > i && deltas[i].getElement().equals(renamed)); - assertTrue("kind should be K_ADDED", deltas[i].getKind() == IJavaElementDelta.ADDED); + assertTrue("kind should be K_ADDED", deltas[i].getKind() == (force? IJavaElementDelta.CHANGED : IJavaElementDelta.ADDED)); deltas = destDelta.getRemovedChildren(); assertTrue("Removed children not correct for element rename", deltas.length > i && deltas[i].getElement().equals(e)); assertTrue("kind should be K_REMOVED", deltas[i].getKind() == IJavaElementDelta.REMOVED); @@ -364,11 +364,12 @@ assertDeltas( "Unexpected deltas", - "P[*]: {CHILDREN}\n" + - " src[*]: {CHILDREN}\n" + - " [*]: {CHILDREN}\n" + - " X.java[-]: {MOVED_TO(Y.java [in [in src [in P]]])}\n" + - " Y.java[+]: {MOVED_FROM(X.java [in [in src [in P]]])}" + "P[*]: {CHILDREN}\n" + + " src[*]: {CHILDREN}\n" + + " [*]: {CHILDREN}\n" + + " X.java[-]: {MOVED_TO(Y.java [in [in src [in P]]])}\n" + + " Y.java[*]: {CHILDREN | FINE GRAINED | PRIMARY RESOURCE}\n" + + " Y[+]: {MOVED_FROM(X [in X.java [in [in src [in P]]]])}" ); } /* diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java index 291378c..79a2395 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java @@ -357,7 +357,12 @@ } // register the correct change deltas - prepareDeltas(source, destCU, isMove()); + boolean overWrite = this.force && destFile.exists(); + if (overWrite) + getDeltaFor(dest.getJavaProject()).changed(destCU, IJavaElementDelta.F_CONTENT); + else + prepareDeltas(source, destCU, isMove()); + if (newCUName != null) { //the main type has been renamed String oldName = Util.getNameWithoutJavaLikeExtension(source.getElementName());