Skip to content

Commit 2614a37

Browse files
committed
Log resource deltas during FileBuffersForFilesInLinkedFolders
FileBuffersForFilesInLinkedFolders.test16_3() fails infrequently during CI jobs, the fail indicates a missing resource delta notification. This change adds logging for resource deltas during FileBuffersForFilesInLinkedFolders tests, which should help detecting potential concurrent workspace operations. In addition, an extra check in FileBufferFunctions.test16_3() is added, validating that the test file buffer was not disconnected prematurely. See: #2528
1 parent fa50c5b commit 2614a37

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

tests/org.eclipse.core.filebuffers.tests/src/org/eclipse/core/filebuffers/tests/FileBufferFunctions.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,19 @@
3535
import org.eclipse.core.filesystem.EFS;
3636
import org.eclipse.core.filesystem.IFileInfo;
3737
import org.eclipse.core.filesystem.IFileStore;
38+
import org.eclipse.core.internal.filebuffers.ResourceFileBuffer;
3839

40+
import org.eclipse.core.runtime.CoreException;
41+
import org.eclipse.core.runtime.ILog;
3942
import org.eclipse.core.runtime.IPath;
43+
import org.eclipse.core.runtime.Status;
4044

4145
import org.eclipse.core.resources.IProject;
46+
import org.eclipse.core.resources.IResourceChangeEvent;
47+
import org.eclipse.core.resources.IResourceChangeListener;
48+
import org.eclipse.core.resources.IResourceDelta;
49+
import org.eclipse.core.resources.IResourceDeltaVisitor;
50+
import org.eclipse.core.resources.ResourcesPlugin;
4251

4352
import org.eclipse.core.filebuffers.FileBuffers;
4453
import org.eclipse.core.filebuffers.IFileBuffer;
@@ -55,6 +64,8 @@
5564
*/
5665
public abstract class FileBufferFunctions {
5766

67+
private static final IResourceChangeListener LOG_RESOURCE_DELTAS_LISTENER= FileBufferFunctions::logDeltaEvent;
68+
5869
private IProject fProject;
5970
protected ITextFileBufferManager fManager;
6071
private IPath fPath;
@@ -82,6 +93,9 @@ public void setUp() throws Exception {
8293
fPath= createPath(fProject);
8394
ITextFileBuffer buffer= fManager.getTextFileBuffer(fPath, LocationKind.NORMALIZE);
8495
assertNull(buffer);
96+
if (logResourceDeltas()) {
97+
ResourcesPlugin.getWorkspace().addResourceChangeListener(LOG_RESOURCE_DELTAS_LISTENER);
98+
}
8599
}
86100

87101
protected IProject getProject() {
@@ -90,6 +104,9 @@ protected IProject getProject() {
90104

91105
@AfterEach
92106
public void tearDown() {
107+
if (logResourceDeltas()) {
108+
ResourcesPlugin.getWorkspace().removeResourceChangeListener(LOG_RESOURCE_DELTAS_LISTENER);
109+
}
93110
ITextFileBuffer buffer= fManager.getTextFileBuffer(fPath, LocationKind.NORMALIZE);
94111
assertNull(buffer);
95112
ResourceHelper.deleteProject("project");
@@ -99,6 +116,10 @@ protected IPath getPath() {
99116
return fPath;
100117
}
101118

119+
protected boolean logResourceDeltas() {
120+
return false;
121+
}
122+
102123
@RegisterExtension
103124
public TestFailExtension failReporter= new TestFailExtension();
104125

@@ -1004,6 +1025,9 @@ public void stateChanging(IFileBuffer buf) {
10041025

10051026
fileBuffer= fManager.getTextFileBuffer(fPath, LocationKind.NORMALIZE);
10061027
if (moveUnderlyingFile() != null) {
1028+
if (fileBuffer instanceof ResourceFileBuffer buffer) {
1029+
assertFalse(buffer.isDisconnected(), "Buffer should not be disconnected");
1030+
}
10071031
assertEquals(1, listener.count);
10081032
assertSame(fileBuffer, listener.buffer);
10091033
}
@@ -1294,4 +1318,33 @@ public void testGetFileBuffers() throws Exception {
12941318
}
12951319
}
12961320

1321+
protected static void logDeltaEvent(IResourceChangeEvent event) {
1322+
ILog log= FileBuffersTestPlugin.getDefault().getLog();
1323+
StringBuilder s= new StringBuilder();
1324+
s.append("[");
1325+
s.append(Thread.currentThread().getName());
1326+
s.append("] thread logging resource change event");
1327+
s.append(System.lineSeparator());
1328+
s.append("Delta:");
1329+
IResourceDelta delta= event.getDelta();
1330+
if (delta != null) {
1331+
IResourceDeltaVisitor visitor= new IResourceDeltaVisitor() {
1332+
@Override
1333+
public boolean visit(IResourceDelta d) throws CoreException {
1334+
s.append(System.lineSeparator());
1335+
s.append("\tkind: ");
1336+
s.append(d.getKind());
1337+
s.append(", resource: ");
1338+
s.append(d.getResource());
1339+
return true;
1340+
}
1341+
};
1342+
try {
1343+
delta.accept(visitor);
1344+
} catch (CoreException e) {
1345+
log.log(Status.error("Error occurred while visiting delta", e));
1346+
}
1347+
}
1348+
log.log(Status.info(s.toString()));
1349+
}
12971350
}

tests/org.eclipse.core.filebuffers.tests/src/org/eclipse/core/filebuffers/tests/FileBuffersForFilesInLinkedFolders.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,9 @@ protected Class<IAnnotationModel> getAnnotationModelClass() throws Exception {
126126
Bundle bundle= Platform.getBundle("org.eclipse.ui.editors");
127127
return bundle != null ? IAnnotationModel.class : null;
128128
}
129+
130+
@Override
131+
protected boolean logResourceDeltas() {
132+
return true;
133+
}
129134
}

0 commit comments

Comments
 (0)