X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/ProblemsLabelDecorator.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/ProblemsLabelDecorator.java index 53e172d..674d70d 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/ProblemsLabelDecorator.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/ProblemsLabelDecorator.java @@ -45,40 +45,47 @@ import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.MarkerAnnotation; /** - * LabelDecorator that decorates an element's image with error and warning overlays that - * represent the severity of markers attached to the element's underlying resource. To see - * a problem decoration for a marker, the marker needs to be a subtype of IMarker.PROBLEM. + * LabelDecorator that decorates an element's image with error and warning + * overlays that represent the severity of markers attached to the element's + * underlying resource. To see a problem decoration for a marker, the marker + * needs to be a subtype of IMarker.PROBLEM. *

- * Note: Only images for elements in Java projects are currently updated on marker changes. + * Note: Only images for elements in Java projects are currently updated on + * marker changes. *

* * @since 2.0 */ -public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabelDecorator { - +public class ProblemsLabelDecorator implements ILabelDecorator, + ILightweightLabelDecorator { + /** - * This is a special LabelProviderChangedEvent carring additional - * information whether the event orgins from a maker change. + * This is a special LabelProviderChangedEvent carring + * additional information whether the event orgins from a maker change. *

* ProblemsLabelChangedEvents are only generated by * ProblemsLabelDecorators. *

*/ - public static class ProblemsLabelChangedEvent extends LabelProviderChangedEvent { + public static class ProblemsLabelChangedEvent extends + LabelProviderChangedEvent { private boolean fMarkerChange; /** - * Note: This constructor is for internal use only. Clients should not call this constructor. + * Note: This constructor is for internal use only. Clients should not + * call this constructor. */ - public ProblemsLabelChangedEvent(IBaseLabelProvider source, IResource[] changedResource, boolean isMarkerChange) { + public ProblemsLabelChangedEvent(IBaseLabelProvider source, + IResource[] changedResource, boolean isMarkerChange) { super(source, changedResource); - fMarkerChange= isMarkerChange; + fMarkerChange = isMarkerChange; } - + /** - * Returns whether this event origins from marker changes. If false an annotation - * model change is the origin. In this case viewers not displaying working copies can ignore these + * Returns whether this event origins from marker changes. If + * false an annotation model change is the origin. In + * this case viewers not displaying working copies can ignore these * events. * * @return if this event origins from a marker change. @@ -89,13 +96,16 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe } - private static final int ERRORTICK_WARNING= JavaElementImageDescriptor.WARNING; - private static final int ERRORTICK_ERROR= JavaElementImageDescriptor.ERROR; + private static final int ERRORTICK_WARNING = JavaElementImageDescriptor.WARNING; + + private static final int ERRORTICK_ERROR = JavaElementImageDescriptor.ERROR; private ImageDescriptorRegistry fRegistry; - private boolean fUseNewRegistry= false; + + private boolean fUseNewRegistry = false; + private IProblemChangedListener fProblemChangedListener; - + private ListenerList fListeners; /** @@ -103,89 +113,106 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe */ public ProblemsLabelDecorator() { this(null); - fUseNewRegistry= true; + fUseNewRegistry = true; } - + /* * Creates decorator with a shared image registry. * - * @param registry The registry to use or null to use the Java plugin's - * image registry. + * @param registry The registry to use or null to use the + * Java plugin's image registry. */ /** - * Note: This constructor is for internal use only. Clients should not call this constructor. + * Note: This constructor is for internal use only. Clients should not call + * this constructor. */ public ProblemsLabelDecorator(ImageDescriptorRegistry registry) { - fRegistry= registry; - fProblemChangedListener= null; + fRegistry = registry; + fProblemChangedListener = null; } - + private ImageDescriptorRegistry getRegistry() { if (fRegistry == null) { - fRegistry= fUseNewRegistry ? new ImageDescriptorRegistry() : PHPeclipsePlugin.getImageDescriptorRegistry(); + fRegistry = fUseNewRegistry ? new ImageDescriptorRegistry() + : PHPeclipsePlugin.getImageDescriptorRegistry(); } return fRegistry; } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see ILabelDecorator#decorateText(String, Object) */ public String decorateText(String text, Object element) { return text; - } + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see ILabelDecorator#decorateImage(Image, Object) */ public Image decorateImage(Image image, Object obj) { - int adornmentFlags= computeAdornmentFlags(obj); + int adornmentFlags = computeAdornmentFlags(obj); if (adornmentFlags != 0) { - ImageDescriptor baseImage= new ImageImageDescriptor(image); - Rectangle bounds= image.getBounds(); - return getRegistry().get(new JavaElementImageDescriptor(baseImage, adornmentFlags, new Point(bounds.width, bounds.height))); + ImageDescriptor baseImage = new ImageImageDescriptor(image); + Rectangle bounds = image.getBounds(); + return getRegistry().get( + new JavaElementImageDescriptor(baseImage, adornmentFlags, + new Point(bounds.width, bounds.height))); } return image; } /** - * Note: This method is for internal use only. Clients should not call this method. + * Note: This method is for internal use only. Clients should not call this + * method. */ protected int computeAdornmentFlags(Object obj) { try { if (obj instanceof IJavaElement) { - IJavaElement element= (IJavaElement) obj; - int type= element.getElementType(); + IJavaElement element = (IJavaElement) obj; + int type = element.getElementType(); switch (type) { - case IJavaElement.JAVA_PROJECT: - case IJavaElement.PACKAGE_FRAGMENT_ROOT: - return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_INFINITE, null); - case IJavaElement.PACKAGE_FRAGMENT: - case IJavaElement.CLASS_FILE: - return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_ONE, null); - case IJavaElement.COMPILATION_UNIT: - case IJavaElement.PACKAGE_DECLARATION: - case IJavaElement.IMPORT_DECLARATION: - case IJavaElement.IMPORT_CONTAINER: - case IJavaElement.TYPE: - case IJavaElement.INITIALIZER: - case IJavaElement.METHOD: - case IJavaElement.FIELD: - ICompilationUnit cu= (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT); - if (cu != null) { - ISourceReference ref= (type == IJavaElement.COMPILATION_UNIT) ? null : (ISourceReference) element; - // The assumption is that only source elements in compilation unit can have markers - if (cu.isWorkingCopy()) { - // working copy: look at annotation model - return getErrorTicksFromWorkingCopy((ICompilationUnit) cu.getOriginalElement(), ref); - } - return getErrorTicksFromMarkers(cu.getResource(), IResource.DEPTH_ONE, ref); + case IJavaElement.JAVA_PROJECT: + case IJavaElement.PACKAGE_FRAGMENT_ROOT: + return getErrorTicksFromMarkers(element.getResource(), + IResource.DEPTH_INFINITE, null); + case IJavaElement.PACKAGE_FRAGMENT: + case IJavaElement.CLASS_FILE: + return getErrorTicksFromMarkers(element.getResource(), + IResource.DEPTH_ONE, null); + case IJavaElement.COMPILATION_UNIT: + case IJavaElement.PACKAGE_DECLARATION: + case IJavaElement.IMPORT_DECLARATION: + case IJavaElement.IMPORT_CONTAINER: + case IJavaElement.TYPE: + case IJavaElement.INITIALIZER: + case IJavaElement.METHOD: + case IJavaElement.FIELD: + ICompilationUnit cu = (ICompilationUnit) element + .getAncestor(IJavaElement.COMPILATION_UNIT); + if (cu != null) { + ISourceReference ref = (type == IJavaElement.COMPILATION_UNIT) ? null + : (ISourceReference) element; + // The assumption is that only source elements in + // compilation unit can have markers + if (cu.isWorkingCopy()) { + // working copy: look at annotation model + return getErrorTicksFromWorkingCopy( + (ICompilationUnit) cu.getOriginalElement(), + ref); } - break; - default: + return getErrorTicksFromMarkers(cu.getResource(), + IResource.DEPTH_ONE, ref); + } + break; + default: } } else if (obj instanceof IResource) { - return getErrorTicksFromMarkers((IResource) obj, IResource.DEPTH_INFINITE, null); + return getErrorTicksFromMarkers((IResource) obj, + IResource.DEPTH_INFINITE, null); } } catch (CoreException e) { if (e instanceof JavaModelException) { @@ -198,162 +225,195 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe return 0; } - private int getErrorTicksFromMarkers(IResource res, int depth, ISourceReference sourceElement) throws CoreException { + private int getErrorTicksFromMarkers(IResource res, int depth, + ISourceReference sourceElement) throws CoreException { if (res == null || !res.isAccessible()) { return 0; } - int info= 0; - - IMarker[] markers= res.findMarkers(IMarker.PROBLEM, true, depth); + int info = 0; + + IMarker[] markers = res.findMarkers(IMarker.PROBLEM, true, depth); if (markers != null) { - for (int i= 0; i < markers.length && (info != ERRORTICK_ERROR); i++) { - IMarker curr= markers[i]; - if (sourceElement == null || isMarkerInRange(curr, sourceElement)) { - int priority= curr.getAttribute(IMarker.SEVERITY, -1); + for (int i = 0; i < markers.length && (info != ERRORTICK_ERROR); i++) { + IMarker curr = markers[i]; + if (sourceElement == null + || isMarkerInRange(curr, sourceElement)) { + int priority = curr.getAttribute(IMarker.SEVERITY, -1); if (priority == IMarker.SEVERITY_WARNING) { - info= ERRORTICK_WARNING; + info = ERRORTICK_WARNING; } else if (priority == IMarker.SEVERITY_ERROR) { - info= ERRORTICK_ERROR; + info = ERRORTICK_ERROR; } } - } + } } return info; } - private boolean isMarkerInRange(IMarker marker, ISourceReference sourceElement) throws CoreException { + private boolean isMarkerInRange(IMarker marker, + ISourceReference sourceElement) throws CoreException { if (marker.isSubtypeOf(IMarker.TEXT)) { - int pos= marker.getAttribute(IMarker.CHAR_START, -1); + int pos = marker.getAttribute(IMarker.CHAR_START, -1); return isInside(pos, sourceElement); } return false; } - - - private int getErrorTicksFromWorkingCopy(ICompilationUnit original, ISourceReference sourceElement) throws CoreException { - int info= 0; - FileEditorInput editorInput= new FileEditorInput((IFile) original.getResource()); - IAnnotationModel model= PHPeclipsePlugin.getDefault().getCompilationUnitDocumentProvider().getAnnotationModel(editorInput); + + private int getErrorTicksFromWorkingCopy(ICompilationUnit original, + ISourceReference sourceElement) throws CoreException { + int info = 0; + FileEditorInput editorInput = new FileEditorInput((IFile) original + .getResource()); + IAnnotationModel model = PHPeclipsePlugin.getDefault() + .getCompilationUnitDocumentProvider().getAnnotationModel( + editorInput); if (model != null) { - Iterator iter= model.getAnnotationIterator(); + Iterator iter = model.getAnnotationIterator(); while ((info != ERRORTICK_ERROR) && iter.hasNext()) { - Annotation curr= (Annotation) iter.next(); - IMarker marker= isAnnotationInRange(model, curr, sourceElement); + Annotation curr = (Annotation) iter.next(); + IMarker marker = isAnnotationInRange(model, curr, sourceElement); if (marker != null) { - int priority= marker.getAttribute(IMarker.SEVERITY, -1); + int priority = marker.getAttribute(IMarker.SEVERITY, -1); if (priority == IMarker.SEVERITY_WARNING) { - info= ERRORTICK_WARNING; + info = ERRORTICK_WARNING; } else if (priority == IMarker.SEVERITY_ERROR) { - info= ERRORTICK_ERROR; + info = ERRORTICK_ERROR; } } } } return info; } - - private IMarker isAnnotationInRange(IAnnotationModel model, Annotation annot, ISourceReference sourceElement) throws CoreException { + + private IMarker isAnnotationInRange(IAnnotationModel model, + Annotation annot, ISourceReference sourceElement) + throws CoreException { if (annot instanceof MarkerAnnotation) { - IMarker marker= ((MarkerAnnotation) annot).getMarker(); + IMarker marker = ((MarkerAnnotation) annot).getMarker(); if (marker.exists() && marker.isSubtypeOf(IMarker.PROBLEM)) { - Position pos= model.getPosition(annot); - if (sourceElement == null || isInside(pos.getOffset(), sourceElement)) { + Position pos = model.getPosition(annot); + if (sourceElement == null + || isInside(pos.getOffset(), sourceElement)) { return marker; } } } return null; } - + /** * Tests if a position is inside the source range of an element. - * @param pos Position to be tested. - * @param sourceElement Source element (must be a IJavaElement) - * @return boolean Return true if position is located inside the source element. - * @throws CoreException Exception thrown if element range could not be accessed. + * + * @param pos + * Position to be tested. + * @param sourceElement + * Source element (must be a IJavaElement) + * @return boolean Return true if position is located inside + * the source element. + * @throws CoreException + * Exception thrown if element range could not be accessed. * * @since 2.1 */ - protected boolean isInside(int pos, ISourceReference sourceElement) throws CoreException { - ISourceRange range= sourceElement.getSourceRange(); + protected boolean isInside(int pos, ISourceReference sourceElement) + throws CoreException { + ISourceRange range = sourceElement.getSourceRange(); if (range != null) { - int rangeOffset= range.getOffset(); - return (rangeOffset <= pos && rangeOffset + range.getLength() > pos); + int rangeOffset = range.getOffset(); + return (rangeOffset <= pos && rangeOffset + range.getLength() > pos); } return false; - } - - /* (non-Javadoc) + } + + /* + * (non-Javadoc) + * * @see IBaseLabelProvider#dispose() */ public void dispose() { if (fProblemChangedListener != null) { - PHPeclipsePlugin.getDefault().getProblemMarkerManager().removeListener(fProblemChangedListener); - fProblemChangedListener= null; + PHPeclipsePlugin.getDefault().getProblemMarkerManager() + .removeListener(fProblemChangedListener); + fProblemChangedListener = null; } if (fRegistry != null && fUseNewRegistry) { fRegistry.dispose(); } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see IBaseLabelProvider#isLabelProperty(Object, String) */ public boolean isLabelProperty(Object element, String property) { return true; } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see IBaseLabelProvider#addListener(ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { if (fListeners == null) { - fListeners= new ListenerList(); + fListeners = new ListenerList(); } fListeners.add(listener); if (fProblemChangedListener == null) { - fProblemChangedListener= new IProblemChangedListener() { - public void problemsChanged(IResource[] changedResources, boolean isMarkerChange) { + fProblemChangedListener = new IProblemChangedListener() { + public void problemsChanged(IResource[] changedResources, + boolean isMarkerChange) { fireProblemsChanged(changedResources, isMarkerChange); } }; - PHPeclipsePlugin.getDefault().getProblemMarkerManager().addListener(fProblemChangedListener); + PHPeclipsePlugin.getDefault().getProblemMarkerManager() + .addListener(fProblemChangedListener); } - } + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see IBaseLabelProvider#removeListener(ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { if (fListeners != null) { fListeners.remove(listener); if (fListeners.isEmpty() && fProblemChangedListener != null) { - PHPeclipsePlugin.getDefault().getProblemMarkerManager().removeListener(fProblemChangedListener); - fProblemChangedListener= null; + PHPeclipsePlugin.getDefault().getProblemMarkerManager() + .removeListener(fProblemChangedListener); + fProblemChangedListener = null; } } } - - private void fireProblemsChanged(IResource[] changedResources, boolean isMarkerChange) { + + private void fireProblemsChanged(IResource[] changedResources, + boolean isMarkerChange) { if (fListeners != null && !fListeners.isEmpty()) { - LabelProviderChangedEvent event= new ProblemsLabelChangedEvent(this, changedResources, isMarkerChange); - Object[] listeners= fListeners.getListeners(); - for (int i= 0; i < listeners.length; i++) { - ((ILabelProviderListener) listeners[i]).labelProviderChanged(event); + LabelProviderChangedEvent event = new ProblemsLabelChangedEvent( + this, changedResources, isMarkerChange); + Object[] listeners = fListeners.getListeners(); + for (int i = 0; i < listeners.length; i++) { + ((ILabelProviderListener) listeners[i]) + .labelProviderChanged(event); } } } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, + * org.eclipse.jface.viewers.IDecoration) */ - public void decorate(Object element, IDecoration decoration) { - int adornmentFlags= computeAdornmentFlags(element); + public void decorate(Object element, IDecoration decoration) { + int adornmentFlags = computeAdornmentFlags(element); if (adornmentFlags == ERRORTICK_ERROR) { decoration.addOverlay(PHPUiImages.DESC_OVR_ERROR); } else if (adornmentFlags == ERRORTICK_WARNING) { decoration.addOverlay(PHPUiImages.DESC_OVR_WARNING); - } + } } }