X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaAnnotationHover.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaAnnotationHover.java index bdecc4a..0fe8fce 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaAnnotationHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaAnnotationHover.java @@ -31,47 +31,57 @@ import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.texteditor.AnnotationPreference; -// TODO: delete this class ? we use PHPAnnotationHover instead ! /** - * Determines all markers for the given line and collects, concatenates, and formates - * their messages. + * Determines all markers for the given line and collects, concatenates, and + * formates their messages. */ public class JavaAnnotationHover implements IAnnotationHover { private static class JavaAnnotationHoverType { } - - public static final JavaAnnotationHoverType OVERVIEW_RULER_HOVER= new JavaAnnotationHoverType(); - public static final JavaAnnotationHoverType TEXT_RULER_HOVER= new JavaAnnotationHoverType(); - public static final JavaAnnotationHoverType VERTICAL_RULER_HOVER= new JavaAnnotationHoverType(); - - private IPreferenceStore fStore= PHPeclipsePlugin.getDefault().getPreferenceStore(); - + + public static final JavaAnnotationHoverType OVERVIEW_RULER_HOVER = new JavaAnnotationHoverType(); + + public static final JavaAnnotationHoverType TEXT_RULER_HOVER = new JavaAnnotationHoverType(); + + public static final JavaAnnotationHoverType VERTICAL_RULER_HOVER = new JavaAnnotationHoverType(); + + // private IPreferenceStore fStore = + // PHPeclipsePlugin.getDefault().getPreferenceStore(); + private IPreferenceStore fStore = EditorsUI.getPreferenceStore(); + private JavaAnnotationHoverType fType; - + public JavaAnnotationHover(JavaAnnotationHoverType type) { - Assert.isTrue(OVERVIEW_RULER_HOVER.equals(type) || TEXT_RULER_HOVER.equals(type) || VERTICAL_RULER_HOVER.equals(type)); - fType= type; + Assert.isTrue(OVERVIEW_RULER_HOVER.equals(type) + || TEXT_RULER_HOVER.equals(type) + || VERTICAL_RULER_HOVER.equals(type)); + fType = type; } - + /** - * Returns the distance to the ruler line. + * Returns the distance to the ruler line. */ - protected int compareRulerLine(Position position, IDocument document, int line) { - + protected int compareRulerLine(Position position, IDocument document, + int line) { + if (position.getOffset() > -1 && position.getLength() > -1) { try { - int javaAnnotationLine= document.getLineOfOffset(position.getOffset()); + int javaAnnotationLine = document.getLineOfOffset(position + .getOffset()); if (line == javaAnnotationLine) return 1; - if (javaAnnotationLine <= line && line <= document.getLineOfOffset(position.getOffset() + position.getLength())) + if (javaAnnotationLine <= line + && line <= document.getLineOfOffset(position + .getOffset() + + position.getLength())) return 2; } catch (BadLocationException x) { } } - + return 0; } - + /** * Selects a set of markers from the two lists. By default, it just returns * the set of exact matches. @@ -79,60 +89,62 @@ public class JavaAnnotationHover implements IAnnotationHover { protected List select(List exactMatch, List including) { return exactMatch; } + /** * Returns one marker which includes the ruler's line of activity. */ protected List getJavaAnnotationsForLine(ISourceViewer viewer, int line) { - - IDocument document= viewer.getDocument(); - IAnnotationModel model= viewer.getAnnotationModel(); - + + IDocument document = viewer.getDocument(); + IAnnotationModel model = viewer.getAnnotationModel(); + if (model == null) return null; - - List exact= new ArrayList(); - List including= new ArrayList(); - - Iterator e= model.getAnnotationIterator(); - HashMap messagesAtPosition= new HashMap(); + + List exact = new ArrayList(); + List including = new ArrayList(); + + Iterator e = model.getAnnotationIterator(); + HashMap messagesAtPosition = new HashMap(); while (e.hasNext()) { - Annotation annotation= (Annotation) e.next(); + Annotation annotation = (Annotation) e.next(); if (annotation.getText() == null) continue; - - Position position= model.getPosition(annotation); + + Position position = model.getPosition(annotation); if (position == null) continue; - - AnnotationPreference preference= getAnnotationPreference(annotation); + + AnnotationPreference preference = getAnnotationPreference(annotation); if (preference == null) continue; - - if (OVERVIEW_RULER_HOVER.equals(fType)) { - String key= preference.getOverviewRulerPreferenceKey(); + + if (OVERVIEW_RULER_HOVER.equals(fType)) { + String key = preference.getOverviewRulerPreferenceKey(); if (key == null || !fStore.getBoolean(key)) continue; } else if (TEXT_RULER_HOVER.equals(fType)) { - String key= preference.getTextPreferenceKey(); + String key = preference.getTextPreferenceKey(); if (key != null) { if (!fStore.getBoolean(key)) continue; } else { - key= preference.getHighlightPreferenceKey(); + key = preference.getHighlightPreferenceKey(); if (key == null || !fStore.getBoolean(key)) continue; } } else if (VERTICAL_RULER_HOVER.equals(fType)) { - String key= preference.getVerticalRulerPreferenceKey(); + String key = preference.getVerticalRulerPreferenceKey(); // backward compatibility if (key != null && !fStore.getBoolean(key)) continue; } - - if (isDuplicateJavaAnnotation(messagesAtPosition, position, annotation.getText())) + + if (isDuplicateJavaAnnotation(messagesAtPosition, position, + annotation.getText())) continue; - + switch (compareRulerLine(position, document, line)) { case 1: exact.add(annotation); @@ -142,66 +154,70 @@ public class JavaAnnotationHover implements IAnnotationHover { break; } } - + return select(exact, including); } -// /** -// * Returns one marker which includes the ruler's line of activity. -// */ -// protected List getJavaAnnotationsForLine(ISourceViewer viewer, int line) { -// -// IDocument document= viewer.getDocument(); -// IAnnotationModel model= viewer.getAnnotationModel(); -// -// if (model == null) -// return null; -// -// List exact= new ArrayList(); -// List including= new ArrayList(); -// -// Iterator e= model.getAnnotationIterator(); -// HashMap messagesAtPosition= new HashMap(); -// while (e.hasNext()) { -// Object o= e.next(); -// if (o instanceof IJavaAnnotation) { -// IJavaAnnotation a= (IJavaAnnotation)o; -// if (!a.hasOverlay()) { -// Position position= model.getPosition((Annotation)a); -// if (position == null) -// continue; -// -// if (isDuplicateJavaAnnotation(messagesAtPosition, position, a.getMessage())) -// continue; -// -// switch (compareRulerLine(position, document, line)) { -// case 1: -// exact.add(a); -// break; -// case 2: -// including.add(a); -// break; -// } -// } -// } -// } -// -// return select(exact, including); -// } - - private boolean isDuplicateJavaAnnotation(Map messagesAtPosition, Position position, String message) { + + // /** + // * Returns one marker which includes the ruler's line of activity. + // */ + // protected List getJavaAnnotationsForLine(ISourceViewer viewer, int line) + // { + // + // IDocument document= viewer.getDocument(); + // IAnnotationModel model= viewer.getAnnotationModel(); + // + // if (model == null) + // return null; + // + // List exact= new ArrayList(); + // List including= new ArrayList(); + // + // Iterator e= model.getAnnotationIterator(); + // HashMap messagesAtPosition= new HashMap(); + // while (e.hasNext()) { + // Object o= e.next(); + // if (o instanceof IJavaAnnotation) { + // IJavaAnnotation a= (IJavaAnnotation)o; + // if (!a.hasOverlay()) { + // Position position= model.getPosition((Annotation)a); + // if (position == null) + // continue; + // + // if (isDuplicateJavaAnnotation(messagesAtPosition, position, + // a.getMessage())) + // continue; + // + // switch (compareRulerLine(position, document, line)) { + // case 1: + // exact.add(a); + // break; + // case 2: + // including.add(a); + // break; + // } + // } + // } + // } + // + // return select(exact, including); + // } + + private boolean isDuplicateJavaAnnotation(Map messagesAtPosition, + Position position, String message) { if (messagesAtPosition.containsKey(position)) { - Object value= messagesAtPosition.get(position); + Object value = messagesAtPosition.get(position); if (message.equals(value)) return true; if (value instanceof List) { - List messages= (List)value; - if (messages.contains(message)) + List messages = (List) value; + if (messages.contains(message)) return true; else messages.add(message); } else { - ArrayList messages= new ArrayList(); + ArrayList messages = new ArrayList(); messages.add(value); messages.add(message); messagesAtPosition.put(position, messages); @@ -210,118 +226,129 @@ public class JavaAnnotationHover implements IAnnotationHover { messagesAtPosition.put(position, message); return false; } - + /* * @see IVerticalRulerHover#getHoverInfo(ISourceViewer, int) */ public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { - List javaAnnotations= getJavaAnnotationsForLine(sourceViewer, lineNumber); + List javaAnnotations = getJavaAnnotationsForLine(sourceViewer, + lineNumber); if (javaAnnotations != null) { - + if (javaAnnotations.size() == 1) { - + // optimization - Annotation annotation= (Annotation) javaAnnotations.get(0); - String message= annotation.getText(); + Annotation annotation = (Annotation) javaAnnotations.get(0); + String message = annotation.getText(); if (message != null && message.trim().length() > 0) return formatSingleMessage(message); - + } else { - - List messages= new ArrayList(); - - Iterator e= javaAnnotations.iterator(); + + List messages = new ArrayList(); + + Iterator e = javaAnnotations.iterator(); while (e.hasNext()) { - Annotation annotation= (Annotation) e.next(); - String message= annotation.getText(); + Annotation annotation = (Annotation) e.next(); + String message = annotation.getText(); if (message != null && message.trim().length() > 0) messages.add(message.trim()); } - + if (messages.size() == 1) return formatSingleMessage((String) messages.get(0)); - + if (messages.size() > 1) return formatMultipleMessages(messages); } } - + return null; } + /* * @see IVerticalRulerHover#getHoverInfo(ISourceViewer, int) */ -// public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { -// List javaAnnotations= getJavaAnnotationsForLine(sourceViewer, lineNumber); -// if (javaAnnotations != null) { -// -// if (javaAnnotations.size() == 1) { -// -// // optimization -// IJavaAnnotation javaAnnotation= (IJavaAnnotation) javaAnnotations.get(0); -// String message= javaAnnotation.getMessage(); -// if (message != null && message.trim().length() > 0) -// return formatSingleMessage(message); -// -// } else { -// -// List messages= new ArrayList(); -// -// Iterator e= javaAnnotations.iterator(); -// while (e.hasNext()) { -// IJavaAnnotation javaAnnotation= (IJavaAnnotation) e.next(); -// String message= javaAnnotation.getMessage(); -// if (message != null && message.trim().length() > 0) -// messages.add(message.trim()); -// } -// -// if (messages.size() == 1) -// return formatSingleMessage((String) messages.get(0)); -// -// if (messages.size() > 1) -// return formatMultipleMessages(messages); -// } -// } -// -// return null; -// } - + // public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { + // List javaAnnotations= getJavaAnnotationsForLine(sourceViewer, + // lineNumber); + // if (javaAnnotations != null) { + // + // if (javaAnnotations.size() == 1) { + // + // // optimization + // IJavaAnnotation javaAnnotation= (IJavaAnnotation) javaAnnotations.get(0); + // String message= javaAnnotation.getMessage(); + // if (message != null && message.trim().length() > 0) + // return formatSingleMessage(message); + // + // } else { + // + // List messages= new ArrayList(); + // + // Iterator e= javaAnnotations.iterator(); + // while (e.hasNext()) { + // IJavaAnnotation javaAnnotation= (IJavaAnnotation) e.next(); + // String message= javaAnnotation.getMessage(); + // if (message != null && message.trim().length() > 0) + // messages.add(message.trim()); + // } + // + // if (messages.size() == 1) + // return formatSingleMessage((String) messages.get(0)); + // + // if (messages.size() > 1) + // return formatMultipleMessages(messages); + // } + // } + // + // return null; + // } /* * Formats a message as HTML text. */ private String formatSingleMessage(String message) { - StringBuffer buffer= new StringBuffer(); + StringBuffer buffer = new StringBuffer(); HTMLPrinter.addPageProlog(buffer); - HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(message)); + HTMLPrinter.addParagraph(buffer, HTMLPrinter + .convertToHTMLContent(message)); HTMLPrinter.addPageEpilog(buffer); return buffer.toString(); } - + /* * Formats several message as HTML text. */ private String formatMultipleMessages(List messages) { - StringBuffer buffer= new StringBuffer(); + StringBuffer buffer = new StringBuffer(); HTMLPrinter.addPageProlog(buffer); - HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(PHPUIMessages.getString("JavaAnnotationHover.multipleMarkersAtThisLine"))); //$NON-NLS-1$ - + HTMLPrinter + .addParagraph( + buffer, + HTMLPrinter + .convertToHTMLContent(PHPUIMessages + .getString("JavaAnnotationHover.multipleMarkersAtThisLine"))); //$NON-NLS-1$ + HTMLPrinter.startBulletList(buffer); - Iterator e= messages.iterator(); + Iterator e = messages.iterator(); while (e.hasNext()) - HTMLPrinter.addBullet(buffer, HTMLPrinter.convertToHTMLContent((String) e.next())); - HTMLPrinter.endBulletList(buffer); - + HTMLPrinter.addBullet(buffer, HTMLPrinter + .convertToHTMLContent((String) e.next())); + HTMLPrinter.endBulletList(buffer); + HTMLPrinter.addPageEpilog(buffer); return buffer.toString(); } - + /** * Returns the annotation preference for the given annotation. * - * @param annotation the annotation + * @param annotation + * the annotation * @return the annotation preference or null if none - */ + */ private AnnotationPreference getAnnotationPreference(Annotation annotation) { - return EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference(annotation); + return EditorsUI.getAnnotationPreferenceLookup() + .getAnnotationPreference(annotation); } }