| /** |
| * Copyright (c) 2013-2014 Angelo ZERR. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * Contributors: |
| * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation |
| */ |
| package org.eclipse.wst.jsdt.js.common.util; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.ide.IDE; |
| import org.eclipse.ui.part.FileEditorInput; |
| import org.eclipse.ui.texteditor.ITextEditor; |
| import org.eclipse.wst.jsdt.js.common.CommonPlugin; |
| import org.eclipse.wst.jsdt.js.common.build.system.ITask; |
| import org.eclipse.wst.jsdt.js.common.build.system.Location; |
| |
| public class EditorUtility { |
| |
| /** |
| * Tests if a is currently shown in an editor |
| * |
| * @return the IEditorPart if shown, null if element is not open in an |
| * editor |
| */ |
| public static IEditorPart isOpenInEditor(ITask task) { |
| IEditorInput input = new FileEditorInput(task.getBuildFile()); |
| IWorkbenchPage p = CommonPlugin.getActivePage(); |
| if (p != null) { |
| return p.findEditor(input); |
| } |
| return null; |
| } |
| |
| public static void revealInEditor(IEditorPart editorPart, ITask task) { |
| revealInEditor(editorPart, task, null); |
| } |
| |
| public static void revealInEditor(IEditorPart editorPart, ITask task, IWorkbenchPage page) { |
| if (task == null) |
| return; |
| |
| ITextEditor textEditor = null; |
| if (editorPart instanceof ITextEditor) |
| textEditor = (ITextEditor) editorPart; |
| else if (editorPart instanceof IAdaptable) |
| textEditor = (ITextEditor) editorPart.getAdapter(ITextEditor.class); |
| if (textEditor != null) { |
| Location location = task.getLocation(); |
| if (location != null) { |
| int start = location.getStart(); |
| if (start > 0) { |
| int length = location.getLength(); |
| textEditor.selectAndReveal(start, length); |
| if (page != null) { |
| page.activate(editorPart); |
| } |
| } |
| } |
| } else { |
| Location location = task.getLocation(); |
| if (location != null) { |
| IFile fileResource = task.getBuildFile(); |
| int start = location.getStart(); |
| try { |
| IMarker marker = fileResource.createMarker("org.eclipse.core.resources.textmarker"); //$NON-NLS-1$ |
| marker.setAttribute("lineNumber", start); //$NON-NLS-1$ |
| editorPart = IDE.openEditor(page, marker, true); |
| marker.delete(); |
| } catch (CoreException e) { |
| CommonPlugin.logError(e); |
| } |
| } |
| } |
| |
| } |
| } |