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

org.eclipse.jface.text.DocumentPartitioningChangedEvent 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, 2007 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.jface.text;

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

import org.eclipse.core.runtime.Assert;

/**
 * Event describing the change of document partitionings.
 *
 * @see org.eclipse.jface.text.IDocumentExtension3
 * @since 3.0
 */
public class DocumentPartitioningChangedEvent {

	/** The document whose partitionings changed */
	private final IDocument fDocument;
	/** The map of partitionings to changed regions. */
	private final Map fMap= new HashMap<>();


	/**
	 * Creates a new document partitioning changed event for the given document.
	 * Initially this event is empty, i.e. does not describe any change.
	 *
	 * @param document the changed document
	 */
	public DocumentPartitioningChangedEvent(IDocument document) {
		fDocument= document;
	}

	/**
	 * Returns the changed document.
	 *
	 * @return the changed document
	 */
	public IDocument getDocument() {
		return fDocument;
	}

	/**
	 * Returns the changed region of the given partitioning or null
	 * if the given partitioning did not change.
	 *
	 * @param partitioning the partitioning
	 * @return the changed region of the given partitioning or null
	 */
	public IRegion getChangedRegion(String partitioning) {
		return fMap.get(partitioning);
	}

	/**
	 * Returns the set of changed partitionings.
	 *
	 * @return the set of changed partitionings
	 */
	public String[] getChangedPartitionings() {
		String[] partitionings= new String[fMap.size()];
		fMap.keySet().toArray(partitionings);
		return partitionings;
	}

	/**
	 * Sets the specified range as changed region for the given partitioning.
	 *
	 * @param partitioning the partitioning
	 * @param offset the region offset
	 * @param length the region length
	 */
	public void setPartitionChange(String partitioning, int offset, int length) {
		Assert.isNotNull(partitioning);
		fMap.put(partitioning, new Region(offset, length));
	}

	/**
	 * Returns true if the set of changed partitionings is empty,
	 * false otherwise.
	 *
	 * @return true if the set of changed partitionings is empty
	 */
	public boolean isEmpty() {
		return fMap.isEmpty();
	}

	/**
	 * Returns the coverage of this event. This is the minimal region that
	 * contains all changed regions of all changed partitionings.
	 *
	 * @return the coverage of this event
	 */
	public IRegion getCoverage() {
		if (fMap.isEmpty())
			return new Region(0, 0);

		int offset= -1;
		int endOffset= -1;
		Iterator e= fMap.values().iterator();
		while (e.hasNext()) {
			IRegion r= e.next();

			if (offset < 0 || r.getOffset() < offset)
				offset= r.getOffset();

			int end= r.getOffset() + r.getLength();
			if (end > endOffset)
				endOffset= end;
		}

		return new Region(offset, endOffset - offset);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy