Copyright (c) 2000, 2015 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2000, 2015 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.core.internal.resources; import org.eclipse.core.internal.events.ResourceDelta; import org.eclipse.core.internal.events.ResourceDeltaFactory; import org.eclipse.core.internal.utils.Policy; import org.eclipse.core.internal.watson.ElementTree; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.ISchedulingRule;
Standard implementation of the ISavedState interface.
/** * Standard implementation of the ISavedState interface. */
public class SavedState implements ISavedState { ElementTree oldTree; ElementTree newTree; SafeFileTable fileTable; String pluginId; Workspace workspace; SavedState(Workspace workspace, String pluginId, ElementTree oldTree, ElementTree newTree) throws CoreException { this.workspace = workspace; this.pluginId = pluginId; this.newTree = newTree; this.oldTree = oldTree; this.fileTable = restoreFileTable(); } void forgetTrees() { newTree = null; oldTree = null; workspace.saveManager.clearDeltaExpiration(pluginId); } @Override public int getSaveNumber() { return workspace.getSaveManager().getSaveNumber(pluginId); } protected SafeFileTable getFileTable() { return fileTable; } protected SafeFileTable restoreFileTable() throws CoreException { if (fileTable == null) fileTable = new SafeFileTable(pluginId); return fileTable; } @Override public IPath lookup(IPath file) { return getFileTable().lookup(file); } @Override public IPath[] getFiles() { return getFileTable().getFiles(); } @Override public void processResourceChangeEvents(IResourceChangeListener listener) { try { final ISchedulingRule rule = workspace.getRoot(); try { workspace.prepareOperation(rule, null); if (oldTree == null || newTree == null) return; workspace.beginOperation(true); ResourceDelta delta = ResourceDeltaFactory.computeDelta(workspace, oldTree, newTree, Path.ROOT, -1); forgetTrees(); // free trees to prevent memory leak workspace.getNotificationManager().broadcastChanges(listener, IResourceChangeEvent.POST_BUILD, delta); } finally { workspace.endOperation(rule, false); } } catch (CoreException e) { // this is unlikely to happen, so, just log it Policy.log(e); } } }