Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2007 Sven Efftinge (http://www.efftinge.de) and others. 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: committers of openArchitectureWare /
 
 package org.eclipse.xtext.ui.editor.hover;
 
 import java.util.List;
 import java.util.Set;
 
 import  org.eclipse.jface.text.ITextViewer;
 import  org.eclipse.jface.text.Position;
 import  org.eclipse.jface.text.Region;
 import  org.eclipse.jface.text.source.Annotation;
 import  org.eclipse.jface.text.source.IAnnotationHover;
 import  org.eclipse.jface.text.source.ISourceViewer;
 

Author(s):
Sven Efftinge - Initial contribution and API
Christoph Kulla - Adaptation to AbstractProblemHover
 
 public class ProblemAnnotationHover extends AbstractProblemHover implements IAnnotationHover {
 	
 	// IAnnotationHover
 	
 	public String getHoverInfo(final ISourceViewer sourceViewerfinal int lineNumber) {
 		Object o = getHoverInfoInternal(sourceViewerlineNumber, -1);
 		if (o!=null)
 			return o.toString();
 		return null;
 	}
 	
 		
 	// AbstractProblemHover
 	
 	protected Region getHoverRegionInternal(final int lineNumberfinal int offset) {
 		List<Annotation> annotations = getAnnotations(lineNumberoffset);
 		for (Annotation annotation : annotations) {
 			Position position = .getAnnotationModel().getPosition(annotation);
 			if (position != null) {
 				final int start = position.getOffset();
 				return new Region (startposition.getLength());	
 			}
 		}
 		return null;
 	}
 		
 	protected Object getHoverInfoInternal(final ITextViewer textViewerfinal int lineNumberfinal int offset) {
 		final Set<Stringmessages = Sets.newLinkedHashSet();
 		List<Annotation> annotations = getAnnotations(lineNumberoffset);
 		for (Annotation annotation : annotations) {
 			String text = annotation.getText();
 			if (text != null) {
 				messages.add(text.trim());
 			}
 		}
 		if (messages.size()>0)
 			return formatInfo(messages);
 		return null;
 	}
 	
 	protected String formatInfo(final Collection<Stringmessages) {
 		final StringBuilder buffer = new StringBuilder();
 		if (messages.size() > 1) {
 			final Iterator<Stringe = messages.iterator();
 			while (e.hasNext()) {
 				splitInfo("- " + e.next() + "\n"buffer);
 			}
 			buffer.deleteCharAt(buffer.length()-1);
 		}
 		else if (messages.size() == 1) {
 			splitInfo(messages.iterator().next(), buffer);
 		}
 		return buffer.toString();
 	}
 	
 	private String splitInfo(final String messagefinal StringBuilder buffer) {
 		String msg = message;
 		String prefix = "";
 		int pos;
 		do {
 			pos = msg.indexOf(" ", 60);
 			if (pos > -1) {
 				buffer.append(prefix + msg.substring(0, pos) + "\n");
 				msg = msg.substring(pos);
				prefix = "  ";
			}
			else {
				buffer.append(prefix + msg);
			}
while (pos > -1);
		return buffer.toString();
	}
New to GrepCode? Check out our FAQ X