/** * Copyright (c) 2016 by Brainwy Software LTDA. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. * * A re-factor of <code>PyTextHover</code> to use the extension point <code>org.python.pydev.pyTextHover</code> */ package org.python.pydev.editor.hover; import java.util.Iterator; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextViewer; import org.python.pydev.core.IPythonPartitions; import org.python.pydev.editor.PyInformationPresenter; import org.python.pydev.editor.codefolding.MarkerAnnotationAndPosition; import org.python.pydev.editor.codefolding.PySourceViewer; import org.python.pydev.shared_core.string.FastStringBuffer; import org.python.pydev.shared_ui.utils.PyMarkerUtils; public class PyMarkerTextHover extends AbstractPyEditorTextHover { public static String ID = "org.python.pydev.editor.hover.pyMarkerTextHover"; /* * (non-Javadoc) * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion) */ @Override public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { FastStringBuffer buf = new FastStringBuffer(); if (textViewer instanceof PySourceViewer) { PySourceViewer s = (PySourceViewer) textViewer; getMarkerHover(hoverRegion, s, buf); } return buf.toString(); } /* * (non-Javadoc) * @see org.python.pydev.editor.hover.AbstractPyEditorTextHover#isContentTypeSupported(java.lang.String) */ @Override public boolean isContentTypeSupported(String contentType) { boolean pythonCommentOrMultiline = IPythonPartitions.NON_DEFAULT_TYPES_AS_SET.contains(contentType); return !pythonCommentOrMultiline; } /** * Fills the buffer with the text for markers we're hovering over. */ private void getMarkerHover(IRegion hoverRegion, PySourceViewer s, FastStringBuffer buf) { for (Iterator<MarkerAnnotationAndPosition> it = s.getMarkerIterator(); it.hasNext();) { MarkerAnnotationAndPosition marker = it.next(); try { if (marker.position == null) { continue; } int cStart = marker.position.offset; int cEnd = cStart + marker.position.length; int offset = hoverRegion.getOffset(); if (cStart <= offset && cEnd >= offset) { if (buf.length() > 0) { buf.append(PyInformationPresenter.LINE_DELIM); } IMarker m = marker.markerAnnotation.getMarker(); if (!PyMarkerUtils.showToUser(m)) { continue; } Object msg = m.getAttribute(IMarker.MESSAGE); buf.appendObject(msg); } } catch (CoreException e) { //ignore marker does not exist anymore } } } }