All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.text.undo.DocumentUndoManagerRegistry Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * 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.text.undo;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.Assert;

import org.eclipse.jface.text.IDocument;


/**
 * This document undo manager registry provides access to a document's
 * undo manager. In order to connect a document a document undo manager
 * call connect. After that call has successfully completed
 * undo manager can be obtained via getDocumentUndoManager.
 * The undo manager is created on the first connect and disposed on the last
 * disconnect, i.e. this registry keeps track of how often a undo manager is
 * connected and returns the same undo manager to each client as long as the
 * document is connected.
 * 

* The recoding of changes starts with the first {@link #connect(IDocument)}.

* * @since 3.2 * @noinstantiate This class is not intended to be instantiated by clients. */ public final class DocumentUndoManagerRegistry { private static final class Record { public Record(IDocument document) { count= 0; undoManager= new DocumentUndoManager(document); } private int count; private IDocumentUndoManager undoManager; } private static Map fgFactory= new HashMap<>(); private DocumentUndoManagerRegistry() { // Do not instantiate } /** * Connects the file at the given location to this manager. After that call * successfully completed it is guaranteed that each call to getFileBuffer * returns the same file buffer until disconnect is called. *

* The recoding of changes starts with the first {@link #connect(IDocument)}.

* * @param document the document to be connected */ public static synchronized void connect(IDocument document) { Assert.isNotNull(document); Record record= fgFactory.get(document); if (record == null) { record= new Record(document); fgFactory.put(document, record); } record.count++; } /** * Disconnects the given document from this registry. * * @param document the document to be disconnected */ public static synchronized void disconnect(IDocument document) { Assert.isNotNull(document); Record record= fgFactory.get(document); record.count--; if (record.count == 0) fgFactory.remove(document); } /** * Returns the file buffer managed for the given location or null * if there is no such file buffer. *

* The provided location is either a full path of a workspace resource or * an absolute path in the local file system. The file buffer manager does * not resolve the location of workspace resources in the case of linked * resources. *

* * @param document the document for which to get its undo manager * @return the document undo manager or null */ public static synchronized IDocumentUndoManager getDocumentUndoManager(IDocument document) { Assert.isNotNull(document); Record record= fgFactory.get(document); if (record == null) return null; return record.undoManager; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy