Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJayaprakash Arthanareeswaran2011-11-14 06:42:22 +0000
committerJayaprakash Arthanareeswaran2011-12-20 05:53:01 +0000
commit2e99c72cc03690dcb30e61cdafeb829a4f1ada2f (patch)
treefa6fbc2878f0b64ae3e99a10a4aaea86d060f160
parentfda975d98b069f678ae89a663957463bb7bd4088 (diff)
downloadeclipse.jdt.core-2e99c72cc03690dcb30e61cdafeb829a4f1ada2f.tar.gz
eclipse.jdt.core-2e99c72cc03690dcb30e61cdafeb829a4f1ada2f.tar.xz
eclipse.jdt.core-2e99c72cc03690dcb30e61cdafeb829a4f1ada2f.zip
HEAD - Fix for 362711: possibly incorrect JDT POST_CHANGE event fired when av20111220-0553
file is replaced
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveElementsTests.java4
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveResourcesTests.java107
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CopyMoveTests.java39
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RenameTests.java15
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java7
5 files changed, 108 insertions, 64 deletions
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 eec97aca5a..8ecb0b9376 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 @@ public void testMoveMethodsWithCancel() throws CoreException {
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 @@ public void testMoveMethodsWithCancelInDifferentProject() throws CoreException {
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 3d4d1ecc59..2b68fd096e 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 @@ public IJavaElement copyPositive(IJavaElement element, IJavaElement container, I
}
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 @@ public void testMoveCU02() throws CoreException {
* 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");
-
- 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");
+ 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");
- 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 @@ public void testMoveCU04() throws CoreException {
* 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");
-
- 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");
+ 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");
- 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 b1066ae47e..c03e393ce0 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 element, IJavaElement container, IJavaElem
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 @@ public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, I
}
try {
- startDeltas();
+ if(checkDelta) startDeltas();
// move
getJavaModel().move(elements, destinations, siblings, names, force, monitor);
@@ -341,24 +344,26 @@ public void movePositive(IJavaElement[] elements, IJavaElement[] destinations, I
}
}
}
- 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 f08ed7a49d..92b80faca1 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 @@ public void renamePositive(IJavaElement[] elements, IJavaElement[] destinations,
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 @@ public void testRenameCU2() throws CoreException {
assertDeltas(
"Unexpected deltas",
- "P[*]: {CHILDREN}\n" +
- " src[*]: {CHILDREN}\n" +
- " <default>[*]: {CHILDREN}\n" +
- " X.java[-]: {MOVED_TO(Y.java [in <default> [in src [in P]]])}\n" +
- " Y.java[+]: {MOVED_FROM(X.java [in <default> [in src [in P]]])}"
+ "P[*]: {CHILDREN}\n" +
+ " src[*]: {CHILDREN}\n" +
+ " <default>[*]: {CHILDREN}\n" +
+ " X.java[-]: {MOVED_TO(Y.java [in <default> [in src [in P]]])}\n" +
+ " Y.java[*]: {CHILDREN | FINE GRAINED | PRIMARY RESOURCE}\n" +
+ " Y[+]: {MOVED_FROM(X [in X.java [in <default> [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 291378c468..79a2395429 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 @@ public class CopyResourceElementsOperation extends MultiOperation implements Suf
}
// 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());

Back to the top