From b1d1e4a1e13900c102dd472ef0c173e0b8c702e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kubitz?= Date: Thu, 6 Feb 2025 10:17:48 +0100 Subject: [PATCH] try to fix Random failing NatureTest.testBug297871 #1688 Or at least log IOException if any https://github.com/eclipse-platform/eclipse.platform/issues/1688 --- .../localstore/FileSystemResourceManager.java | 2 +- .../resources/ProjectDescription.java | 30 ++++++++++++++++--- .../core/tests/resources/NatureTest.java | 7 +++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java index 14f6a86bfa5..15931305333 100644 --- a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java +++ b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java @@ -972,7 +972,7 @@ public ProjectDescription read(IProject target, boolean creation) throws CoreExc String msg = NLS.bind(Messages.resources_readProjectMeta, target.getName()); error = new ResourceException(IResourceStatus.FAILED_READ_METADATA, target.getFullPath(), msg, e); } catch (IOException ex) { - // ignore + Policy.log(ex); } if (error == null && description == null) { String msg = NLS.bind(Messages.resources_readProjectMeta, target.getName()); diff --git a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java index 8a6506c484c..3502ac2f9a7 100644 --- a/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java +++ b/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java @@ -19,13 +19,35 @@ package org.eclipse.core.internal.resources; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.internal.events.BuildCommand; import org.eclipse.core.internal.utils.FileUtil; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; +import org.eclipse.core.resources.IBuildConfiguration; +import org.eclipse.core.resources.ICommand; +import org.eclipse.core.resources.IDynamicReferenceProvider; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; public class ProjectDescription extends ModelObject implements IProjectDescription { // constants @@ -100,7 +122,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti // fields protected URI location = null; - protected String[] natures = EMPTY_STRING_ARRAY; + protected volatile String[] natures = EMPTY_STRING_ARRAY; protected URI snapshotLocation = null; public ProjectDescription() { diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/NatureTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/NatureTest.java index ea86481c65f..c5483cd4bc9 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/NatureTest.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/NatureTest.java @@ -277,12 +277,13 @@ public void testBug297871() throws Throwable { assertHasEnabledNature(NATURE_EARTH); assertThat(project.getNature(NATURE_EARTH)).isNotNull(); + Files.copy(descTmp.toPath(), desc.toPath(), StandardCopyOption.REPLACE_EXISTING); // Make sure enough time has past to bump file's // timestamp during the copy - Thread.sleep(1000); - - Files.copy(descTmp.toPath(), desc.toPath(), StandardCopyOption.REPLACE_EXISTING); + org.eclipse.core.tests.resources.ResourceTestUtil + .touchInFilesystem(project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME)); + // should read file from filesystem, creating new IProjectDescription: project.refreshLocal(IResource.DEPTH_INFINITE, createTestMonitor()); assertDoesNotHaveNature(NATURE_EARTH); assertThat(project.getNature(NATURE_EARTH)).isNull();