/******************************************************************************* * Copyright (c) 2008, 2009 Phil Muldoon <pkmuldoon@picobot.org>. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Phil Muldoon <pkmuldoon@picobot.org> - initial API. * Red Hat - modifications for use with Valgrind plugins. *******************************************************************************/ package org.eclipse.linuxtools.internal.valgrind.ui.editor; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.reconciler.DirtyRegion; import org.eclipse.jface.text.reconciler.IReconcilingStrategy; import org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension; import org.eclipse.swt.widgets.Display; public class SuppressionsReconcilingStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension { private SuppressionsEditor editor; private IDocument document; private List<Position> positions; private IProgressMonitor monitor; public SuppressionsReconcilingStrategy(SuppressionsEditor editor) { this.editor = editor; positions = new ArrayList<>(); } @Override public void reconcile(IRegion partition) { initialReconcile(); } @Override public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { initialReconcile(); } @Override public void setDocument(IDocument document) { this.document = document; } @Override public void initialReconcile() { int start = -1; int end = document.getLength(); int worked = 0; monitor.beginTask(Messages.getString("SuppressionsReconcilingStrategy.Monitor_title"), 10); //$NON-NLS-1$ for (int pos = 0; pos < end; pos++) { try { char ch = document.getChar(pos); if (ch == '{') { start = pos; } else if (ch == '}' && start > 0) { positions.add(new Position(start, pos - start + 1)); start = -1; // reset } } catch (BadLocationException e) { e.printStackTrace(); } if (pos * 10 / end > worked) { monitor.worked(1); worked++; } } monitor.done(); Display.getDefault().syncExec(() -> editor.updateFoldingStructure(positions.toArray(new Position[positions.size()]))); } @Override public void setProgressMonitor(IProgressMonitor monitor) { this.monitor = monitor; } }