Skip to content

Commit

Permalink
[test] fix AbstractJavaModelTests #1333
Browse files Browse the repository at this point in the history
avoid asynchronous refresh. Implementation taken from
org.eclipse.core.tests.resources.refresh.RefreshProviderTest.joinAutoRefreshJobs()

#1333
  • Loading branch information
EcljpseB0T authored and jukzi committed Nov 30, 2023
1 parent 9484101 commit 1997981
Showing 1 changed file with 18 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ protected class DeltaListener implements IElementChangedListener, IResourceChang
* <code>#startDeltas</code> and
* <code>#stopDeltas</code>.
*/
private IJavaElementDelta[] deltas;
private ArrayList<IJavaElementDelta> deltas = new ArrayList<>();

private final int eventType;

Expand All @@ -373,10 +373,7 @@ public DeltaListener(int eventType) {

public synchronized void elementChanged(ElementChangedEvent event) {
if (this.eventType == -1 || event.getType() == this.eventType) {
IJavaElementDelta[] copy= new IJavaElementDelta[this.deltas.length + 1];
System.arraycopy(this.deltas, 0, copy, 0, this.deltas.length);
copy[this.deltas.length]= event.getDelta();
this.deltas= copy;
this.deltas.add(event.getDelta());
StringBuilder message = new StringBuilder();
Job currentJob = Job.getJobManager().currentJob();
if (currentJob != null) {
Expand All @@ -389,8 +386,8 @@ public synchronized void elementChanged(ElementChangedEvent event) {
}
}
public synchronized CompilationUnit getCompilationUnitAST(ICompilationUnit workingCopy) {
for (int i=0, length= this.deltas.length; i<length; i++) {
CompilationUnit result = getCompilationUnitAST(workingCopy, this.deltas[i]);
for (IJavaElementDelta delta: this.deltas) {
CompilationUnit result = getCompilationUnitAST(workingCopy,delta);
if (result != null)
return result;
}
Expand Down Expand Up @@ -418,8 +415,8 @@ public synchronized IJavaElementDelta getDeltaFor(IJavaElement element, boolean
if (this.deltas == null) waitForResourceDelta();
if (this.deltas == null) return null;
IJavaElementDelta result = null;
for (int i = 0; i < this.deltas.length; i++) {
IJavaElementDelta delta = searchForDelta(element, this.deltas[i]);
for (IJavaElementDelta delta1: this.deltas) {
IJavaElementDelta delta = searchForDelta(element, delta1);
if (delta != null) {
if (returnFirst) {
return delta;
Expand All @@ -431,15 +428,15 @@ public synchronized IJavaElementDelta getDeltaFor(IJavaElement element, boolean
}

public synchronized IJavaElementDelta getLastDelta() {
return this.deltas[this.deltas.length - 1];
return this.deltas.get(this.deltas.size()-1);
}

public synchronized List<IJavaElementDelta> getAllDeltas() {
return List.of(this.deltas);
return this.deltas;
}

public synchronized void flush() {
this.deltas = new IJavaElementDelta[0];
this.deltas.clear();
this.stackTraces = new ByteArrayOutputStream();
this.gotResourceDelta = false;
}
Expand Down Expand Up @@ -512,8 +509,7 @@ public synchronized String stackTraces() {
@Override
public synchronized String toString() {
StringBuilder buffer = new StringBuilder();
for (int i = 0, length= this.deltas.length; i < length; i++) {
IJavaElementDelta delta = this.deltas[i];
for (IJavaElementDelta delta: this.deltas) {
if (((JavaElementDelta) delta).ignoreFromTests) {
continue;
}
Expand Down Expand Up @@ -1607,6 +1603,14 @@ public void clearDeltas(DeltaListener listener) {
listener.flush();
}
public void clearDeltas() {
// We must join on the auto-refresh family because the workspace changes done in the
// tests may be batched and broadcasted by the RefreshJob, not the main thread.
Job.getJobManager().wakeUp(ResourcesPlugin.FAMILY_AUTO_REFRESH);
try {
Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_REFRESH, null);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
this.deltaListener.flush();
}
protected IJavaElement[] codeSelect(ISourceReference sourceReference, String selectAt, String selection) throws JavaModelException {
Expand Down

0 comments on commit 1997981

Please sign in to comment.