errorticks incl. outliner
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
index 205d8b7..6cebc10 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
@@ -61,7 +61,7 @@
import org.eclipse.jdt.internal.ui.preferences.JavaEditorPreferencePage;
import org.eclipse.jdt.internal.ui.refactoring.RefactoringPreferencePage;
import org.eclipse.jdt.internal.ui.snippeteditor.SnippetFileDocumentProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.JavaProblemMarkerFilter;
+import org.eclipse.jdt.internal.ui.viewsupport.ProblemMarkerFilter;
/**
* Represents the java plugin. It provides a series of convenience methods such as
@@ -76,7 +76,7 @@
private ClassFileDocumentProvider fClassFileDocumentProvider;
private FileDocumentProvider fSnippetDocumentProvider;
private JavaTextTools fJavaTextTools;
- private JavaProblemMarkerFilter fJavaProblemMarkerFilter;
+ private ProblemMarkerFilter fProblemMarkerFilter;
public static JavaPlugin getDefault() {
@@ -228,10 +228,10 @@
return getCompilationUnitDocumentProvider();
}
- public JavaProblemMarkerFilter getJavaProblemMarkerFilter() {
- if (fJavaProblemMarkerFilter == null)
- fJavaProblemMarkerFilter= new JavaProblemMarkerFilter();
- return fJavaProblemMarkerFilter;
+ public ProblemMarkerFilter getProblemMarkerFilter() {
+ if (fProblemMarkerFilter == null)
+ fProblemMarkerFilter= new ProblemMarkerFilter();
+ return fProblemMarkerFilter;
}
public JavaTextTools getJavaTextTools() {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AnnotationErrorTickManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AnnotationErrorTickManager.java
new file mode 100644
index 0000000..5c09562
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AnnotationErrorTickManager.java
@@ -0,0 +1,85 @@
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.source.Annotation;
+import org.eclipse.jface.text.source.IAnnotationModel;
+
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.MarkerAnnotation;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaModelMarker;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.viewsupport.IErrorTickManager;
+
+public class AnnotationErrorTickManager implements IErrorTickManager {
+
+ private IAnnotationModel fAnnotationModel;
+
+ public AnnotationErrorTickManager(IAnnotationModel model) {
+ fAnnotationModel= model;
+ }
+
+ public AnnotationErrorTickManager(ITextEditor editor) {
+ this(editor.getDocumentProvider().getAnnotationModel(editor.getEditorInput()));
+ }
+
+
+ /**
+ * @see IErrorTickManager#getErrorInfo(IJavaElement)
+ */
+ public int getErrorInfo(IJavaElement element) {
+ int info= 0;
+ if (element instanceof ISourceReference) {
+ try {
+ ISourceRange range= ((ISourceReference)element).getSourceRange();
+ final int ERRORTICK_ALL= ERRORTICK_WARNING | ERRORTICK_ERROR;
+
+ Iterator iter= fAnnotationModel.getAnnotationIterator();
+ while (info != ERRORTICK_ALL && iter.hasNext()) {
+ Annotation curr= (Annotation) iter.next();
+ IMarker marker= isApplicable(curr, range);
+ if (marker != null) {
+ int priority= marker.getAttribute(IMarker.SEVERITY, -1);
+ if (priority == IMarker.SEVERITY_WARNING) {
+ info |= ERRORTICK_WARNING;
+ } else if (priority == IMarker.SEVERITY_ERROR) {
+ info |= ERRORTICK_ERROR;
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e.getStatus());
+ }
+ }
+ return info;
+ }
+
+ private IMarker isApplicable(Annotation annot, ISourceRange range) {
+ try {
+ if (annot instanceof MarkerAnnotation) {
+ IMarker marker= ((MarkerAnnotation)annot).getMarker();
+ if (marker.isSubtypeOf(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER)) {
+ Position pos= fAnnotationModel.getPosition(annot);
+ if (pos.overlapsWith(range.getOffset(), range.getLength())) {
+ return marker;
+ }
+ }
+ }
+ } catch (CoreException e) {
+ JavaPlugin.log(e.getStatus());
+ }
+ return null;
+ }
+}
+
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
index 527f906..68f5a1d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
@@ -46,6 +46,8 @@
import org.eclipse.ui.texteditor.IUpdate;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.ICompilationUnit;
@@ -60,6 +62,7 @@
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.IWorkingCopy;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
@@ -76,6 +79,8 @@
import org.eclipse.jdt.internal.ui.util.ArrayUtility;
import org.eclipse.jdt.internal.ui.util.JavaModelUtility;
import org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyHelper;
+import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
+import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jdt.internal.ui.viewsupport.StatusBarUpdater;
@@ -249,7 +254,7 @@
};
- class JavaOutlineViewer extends TreeViewer {
+ class JavaOutlineViewer extends ProblemTreeViewer {
/**
* Indicates an item which has been reused. At the point of
@@ -527,6 +532,19 @@
return false;
}
+
+ /**
+ * @see ProblemTreeViewer#getUnderlyingResource
+ */
+ protected IResource getUnderlyingResource(Object obj) throws CoreException {
+ Object input= getInput();
+ if (input instanceof IWorkingCopy) {
+ return ((ICompilationUnit)input).getOriginalElement().getCorrespondingResource();
+ }
+ return null;
+ }
+
+
};
class LexicalSorter extends ViewerSorter {
@@ -753,6 +771,8 @@
JavaPlugin.getDefault().getPreferenceStore().setValue(fPreferenceKey, on);
}
};
+
+
private IJavaElement fInput;
@@ -765,6 +785,8 @@
private Hashtable fActions= new Hashtable();
private ContextMenuGroup[] fActionGroups;
+ private IProblemChangedListener fJavaProblemListener;
+
public JavaOutlinePage(String contextMenuID, JavaEditor editor) {
super();
@@ -789,9 +811,14 @@
Tree tree= new Tree(parent, SWT.MULTI);
+ JavaElementLabelProvider lprovider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_OVERLAY_ICONS | JavaElementLabelProvider.SHOW_TYPE);
+ lprovider.setErrorTickManager(new AnnotationErrorTickManager(fEditor));
+
fOutlineViewer= new JavaOutlineViewer(tree);
fOutlineViewer.setContentProvider(new ChildrenProvider());
- fOutlineViewer.setLabelProvider(new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_OVERLAY_ICONS | JavaElementLabelProvider.SHOW_TYPE));
+ fOutlineViewer.setLabelProvider(lprovider);
+
+ JavaPlugin.getDefault().getProblemMarkerFilter().addListener(fOutlineViewer);
MenuManager manager= new MenuManager(fContextMenuID, fContextMenuID);
manager.setRemoveAllWhenShown(true);
@@ -833,6 +860,8 @@
fSelectionChangedListeners.remove(listeners[i]);
fSelectionChangedListeners= null;
+ JavaPlugin.getDefault().getProblemMarkerFilter().removeListener(fOutlineViewer);
+
if (fMenu != null && !fMenu.isDisposed()) {
fMenu.dispose();
fMenu= null;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
index 12ac0e8..249c230 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineBreakingReader.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineBreakingReader.java
index 0495756..f6b1f75 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineBreakingReader.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineBreakingReader.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
index d049e84..8f6b766 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
@@ -4,13 +4,14 @@
*/
package org.eclipse.jdt.internal.ui.typehierarchy;
-import java.util.Collection;
+import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.ScrollBar;
@@ -52,8 +53,10 @@
import org.eclipse.jdt.internal.ui.actions.OpenSourceReferenceAction;
import org.eclipse.jdt.internal.ui.search.JavaSearchGroup;
import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
import org.eclipse.jdt.internal.ui.viewsupport.JavaTextLabelProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.SeverityItemMapper;
+import org.eclipse.jdt.internal.ui.viewsupport.MarkerErrorTickManager;
+import org.eclipse.jdt.internal.ui.viewsupport.ProblemItemMapper;
/**
@@ -61,18 +64,18 @@
* Offers filter actions.
* No dependency to the type hierarchy view
*/
-public class MethodsViewer extends TableViewer {
+public class MethodsViewer extends TableViewer implements IProblemChangedListener {
- private SeverityItemMapper fSeverityItemMapper;
+ private ProblemItemMapper fProblemItemMapper;
/**
* Sorter that uses the unmodified labelprovider (No declaring class names)
*/
private static class MethodsViewerSorter extends ViewerSorter {
- private JavaTextLabelProvider fLabelProvider;
+ private JavaTextLabelProvider fTextLabelProvider;
public MethodsViewerSorter() {
- fLabelProvider= new JavaTextLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+ fTextLabelProvider= new JavaTextLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
}
public boolean isSorterProperty(Object element, Object property) {
@@ -103,8 +106,8 @@
return cat1 - cat2;
// cat1 == cat2
- String name1= fLabelProvider.getTextLabel((IJavaElement)e1);
- String name2= fLabelProvider.getTextLabel((IJavaElement)e2);
+ String name1= fTextLabelProvider.getTextLabel((IJavaElement)e1);
+ String name2= fTextLabelProvider.getTextLabel((IJavaElement)e2);
return getCollator().compare(name1, name2);
}
}
@@ -129,7 +132,7 @@
public MethodsViewer(Composite parent, IWorkbenchPart part) {
super(new Table(parent, SWT.MULTI));
- fSeverityItemMapper= new SeverityItemMapper();
+ fProblemItemMapper= new ProblemItemMapper();
final Table table= getTable();
final TableColumn column= new TableColumn(table, SWT.NULL | SWT.MULTI | SWT.FULL_SELECTION);
@@ -139,8 +142,11 @@
}
});
+ JavaElementLabelProvider lprovider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+ lprovider.setErrorTickManager(new MarkerErrorTickManager());
MethodsContentProvider contentProvider= new MethodsContentProvider();
- setLabelProvider(new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
+
+ setLabelProvider(lprovider);
setContentProvider(contentProvider);
fOpen= new OpenSourceReferenceAction(this);
@@ -308,15 +314,27 @@
tbm.add(fFilterActions[1]); // static
tbm.add(fFilterActions[2]); // public
}
+
+
+ /**
+ * @see IProblemChangedListener#problemsChanged
+ */
+ public void problemsChanged(final Set changed) {
+ Control control= getControl();
+ if (control != null && !control.isDisposed()) {
+ control.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ fProblemItemMapper.problemsChanged(changed, (ILabelProvider)getLabelProvider());
+ }
+ });
+ }
+ }
private IResource getMappingResource(IMember member) {
try {
- int type= member.getElementType();
- if (type == IJavaElement.TYPE || type == IJavaElement.METHOD || type == IJavaElement.INITIALIZER) {
- ICompilationUnit cu= member.getCompilationUnit();
- if (cu != null) {
- return cu.getCorrespondingResource();
- }
+ ICompilationUnit cu= member.getCompilationUnit();
+ if (cu != null) {
+ return cu.getCorrespondingResource();
}
} catch (JavaModelException e) {
JavaPlugin.log(e.getStatus());
@@ -331,7 +349,7 @@
super.mapElement(element, widget);
IResource res= getMappingResource((IMember)element);
if (res != null && widget instanceof Item) {
- fSeverityItemMapper.addToMap(res, (Item)widget);
+ fProblemItemMapper.addToMap(res, (Item)widget);
}
}
@@ -342,7 +360,7 @@
super.unmapElement(element);
IResource res= getMappingResource((IMember)element);
if (res != null) {
- fSeverityItemMapper.removeFromMap(res, element);
+ fProblemItemMapper.removeFromMap(res, element);
}
}
@@ -352,14 +370,7 @@
*/
protected void unmapAllElements() {
super.unmapAllElements();
- fSeverityItemMapper.clearMap();
+ fProblemItemMapper.clearMap();
}
- /**
- * Called when severities changed.
- */
- public void severitiesChanged(Collection changed) {
- fSeverityItemMapper.severitiesChanged(changed, (ILabelProvider)getLabelProvider());
- }
-
}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
index 437b0cf..3b665f7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
@@ -6,7 +6,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
@@ -38,7 +37,6 @@
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IInputSelectionProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
@@ -88,7 +86,8 @@
import org.eclipse.jdt.internal.ui.util.JavaModelUtility;
import org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyHelper;
import org.eclipse.jdt.internal.ui.util.SelectionUtil;
-import org.eclipse.jdt.internal.ui.viewsupport.IJavaProblemListener;
+import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
+import org.eclipse.jdt.internal.ui.viewsupport.MarkerErrorTickManager;
import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator;
import org.eclipse.jdt.internal.ui.viewsupport.StatusBarUpdater;
@@ -119,7 +118,7 @@
private ArrayList fInputHistory;
private int fCurrHistoryIndex;
- private IJavaProblemListener fJavaProblemListener;
+ private IProblemChangedListener fHierarchyProblemListener;
private TypeHierarchyLifeCycle fHierarchyLifeCycle;
private ITypeHierarchyLifeCycleListener fTypeHierarchyLifeCycleListener;
@@ -138,7 +137,7 @@
private Label fEmptyTypesViewer;
private CLabel fMethodViewerPaneLabel;
- private ILabelProvider fPaneLabelProvider;
+ private JavaElementLabelProvider fPaneLabelProvider;
private IDialogSettings fDialogSettings;
@@ -166,13 +165,7 @@
};
fHierarchyLifeCycle.addChangedListener(fTypeHierarchyLifeCycleListener);
- fJavaProblemListener= new IJavaProblemListener() {
- public void severitiesChanged(Set elements) {
- doSeverityChanged(elements);
- }
- };
- JavaPlugin.getDefault().getJavaProblemMarkerFilter().addListener(fJavaProblemListener);
-
+ fHierarchyProblemListener= null;
fIsEnableMemberFilter= false;
@@ -211,6 +204,7 @@
fFocusOnTypeAction= new FocusOnTypeAction(this);
fPaneLabelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_BASICS);
+ fPaneLabelProvider.setErrorTickManager(new MarkerErrorTickManager());
fAllViewers= new TypeHierarchyViewer[3];
@@ -364,9 +358,13 @@
public void dispose() {
fHierarchyLifeCycle.freeHierarchy();
fHierarchyLifeCycle.removeChangedListener(fTypeHierarchyLifeCycleListener);
- JavaPlugin.getDefault().getJavaProblemMarkerFilter().removeListener(fJavaProblemListener);
fPaneLabelProvider.dispose();
getSite().getPage().removePartListener(fPartListener);
+
+ if (fHierarchyProblemListener != null) {
+ JavaPlugin.getDefault().getProblemMarkerFilter().removeListener(fHierarchyProblemListener);
+ }
+ JavaPlugin.getDefault().getProblemMarkerFilter().removeListener(fMethodsViewer);
super.dispose();
}
@@ -481,6 +479,8 @@
viewPartKeyShortcuts(event);
}
});
+
+ JavaPlugin.getDefault().getProblemMarkerFilter().addListener(fMethodsViewer);
return control;
}
@@ -841,23 +841,7 @@
}
});
}
- }
-
- /**
- * Called from ISeverityListener#severitiesChanged
- */
- private void doSeverityChanged(final Set changeElements) {
- Display display= getDisplay();
- if (display != null) {
- display.asyncExec(new Runnable() {
- public void run() {
- getCurrentViewer().severitiesChanged(changeElements);
- fMethodsViewer.severitiesChanged(changeElements);
- }
- });
- }
- }
-
+ }
private Display getDisplay() {
if (fPagebook != null && !fPagebook.isDisposed()) {
@@ -893,8 +877,9 @@
* called from ToggleViewAction
*/
public void setView(int viewerIndex) {
- if (viewerIndex < fAllViewers.length && fCurrentViewerIndex != viewerIndex) {
+ if (viewerIndex < fAllViewers.length && fCurrentViewerIndex != viewerIndex) {
fCurrentViewerIndex= viewerIndex;
+
updateTypesViewer();
if (fInput != null) {
ISelection currSelection= getCurrentViewer().getSelection();
@@ -904,9 +889,16 @@
if (!fIsEnableMemberFilter) {
typeSelectionChanged(getCurrentViewer().getSelection());
}
- }
-
+ }
updateTitle();
+
+ if (fHierarchyProblemListener != null) {
+ JavaPlugin.getDefault().getProblemMarkerFilter().removeListener(fHierarchyProblemListener);
+ }
+ fHierarchyProblemListener= getCurrentViewer();
+ JavaPlugin.getDefault().getProblemMarkerFilter().addListener(fHierarchyProblemListener);
+
+
fDialogSettings.put(DIALOGSTORE_HIERARCHYVIEW, viewerIndex);
getCurrentViewer().getTree().setFocus();
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
index eae0ac3..761a2f4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
@@ -4,18 +4,11 @@
*/
package org.eclipse.jdt.internal.ui.typehierarchy;
-import java.util.Collection;
-import java.util.HashMap;
-
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.Widget;
-
-import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
@@ -25,16 +18,12 @@
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
@@ -42,36 +31,31 @@
import org.eclipse.jdt.ui.IContextMenuConstants;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.actions.ContextMenuGroup;
import org.eclipse.jdt.internal.ui.actions.GenerateGroup;
import org.eclipse.jdt.internal.ui.actions.OpenSourceReferenceAction;
import org.eclipse.jdt.internal.ui.actions.ShowInPackageViewAction;
import org.eclipse.jdt.internal.ui.search.JavaSearchGroup;
-import org.eclipse.jdt.internal.ui.viewsupport.SeverityItemMapper;
+import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
+import org.eclipse.jdt.internal.ui.viewsupport.MarkerErrorTickManager;
+import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jdt.internal.ui.wizards.NewGroup;
-
-public abstract class TypeHierarchyViewer extends TreeViewer {
+public abstract class TypeHierarchyViewer extends ProblemTreeViewer implements IProblemChangedListener {
private OpenSourceReferenceAction fOpen;
private ShowInPackageViewAction fShowInPackageViewAction;
private ContextMenuGroup[] fStandardGroups;
-
- private SeverityItemMapper fSeverityItemMapper;
-
- private HashMap fPathToWidget;
-
+
public TypeHierarchyViewer(Composite parent, IContentProvider contentProvider, IWorkbenchPart part) {
super(new Tree(parent, SWT.SINGLE));
-
- fSeverityItemMapper= new SeverityItemMapper();
-
- fPathToWidget= new HashMap();
-
- setContentProvider(contentProvider);
- setLabelProvider(new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
+ setContentProvider(contentProvider);
+
+ JavaElementLabelProvider lprovider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+ lprovider.setErrorTickManager(new MarkerErrorTickManager());
+
+ setLabelProvider(lprovider);
setSorter(new ViewerSorter() {
public boolean isSorterProperty(Object element, Object property) {
return true;
@@ -147,61 +131,7 @@
public void setMemberFilter(IMember[] memberFilter) {
getHierarchyContentProvider().setMemberFilter(memberFilter);
}
-
-
- private IResource getMappingResource(IMember member) {
- try {
- int type= member.getElementType();
- if (type == IJavaElement.TYPE || type == IJavaElement.METHOD || type == IJavaElement.INITIALIZER) {
- ICompilationUnit cu= member.getCompilationUnit();
- if (cu != null) {
- return cu.getCorrespondingResource();
- }
- }
- } catch (JavaModelException e) {
- JavaPlugin.log(e.getStatus());
- }
- return null;
- }
-
- /**
- * @see TreeViewer#mapElement
- */
- protected void mapElement(Object element, Widget widget) {
- super.mapElement(element, widget);
- IResource res= getMappingResource((IMember)element);
- if (res != null && widget instanceof Item) {
- fSeverityItemMapper.addToMap(res, (Item)widget);
- }
- }
-
- /**
- * @see TreeViewer#unmapElement
- */
- protected void unmapElement(Object element) {
- super.unmapElement(element);
- IResource res= getMappingResource((IMember)element);
- if (res != null) {
- fSeverityItemMapper.removeFromMap(res, element);
- }
- }
-
- /**
- * @see TreeViewer#unmapAllElements
- */
- protected void unmapAllElements() {
- super.unmapAllElements();
- fSeverityItemMapper.clearMap();
- }
-
- /**
- * @called when severities changed
- */
- public void severitiesChanged(Collection changed) {
- fSeverityItemMapper.severitiesChanged(changed, (ILabelProvider)getLabelProvider());
- }
-
-
+
/**
* Returns true if the hierarchy contains elements.
* With member filtering it is possible that no elements are visible
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IErrorTickManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IErrorTickManager.java
new file mode 100644
index 0000000..e5f68dc
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IErrorTickManager.java
@@ -0,0 +1,17 @@
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import org.eclipse.jdt.core.IJavaElement;
+
+public interface IErrorTickManager {
+
+ public static final int ERRORTICK_WARNING= 1;
+ public static final int ERRORTICK_ERROR= 2;
+
+ /**
+ * @returns an set (specified by an int) using the constants
+ * ERRORTICK_ERROR, ERRORTICK_WARNING
+ */
+ int getErrorInfo(IJavaElement element);
+
+}
+
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IProblemChangedListener.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IProblemChangedListener.java
new file mode 100644
index 0000000..6118d30
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/IProblemChangedListener.java
@@ -0,0 +1,12 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.util.Set;
+
+public interface IProblemChangedListener {
+
+ void problemsChanged(Set changedElements);
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementDescriptorFactory.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementDescriptorFactory.java
index 34c0f45..59b9d7f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementDescriptorFactory.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementDescriptorFactory.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaImageLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaImageLabelProvider.java
index 0527fe3..4dcace6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaImageLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaImageLabelProvider.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MarkerErrorTickManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MarkerErrorTickManager.java
new file mode 100644
index 0000000..4ee8ef0
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MarkerErrorTickManager.java
@@ -0,0 +1,84 @@
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaModelMarker;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.ISourceRange;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+public class MarkerErrorTickManager implements IErrorTickManager {
+
+ /**
+ * @see IErrorTickManager#getErrorInfo
+ */
+ public int getErrorInfo(IJavaElement element) {
+ int info= 0;
+ try {
+ IResource res= null;
+ ISourceRange range= null;
+ int depth= IResource.DEPTH_INFINITE;
+
+ int type= element.getElementType();
+
+ if (type < IJavaElement.TYPE) {
+ res= element.getCorrespondingResource();
+ if (type == IJavaElement.PACKAGE_FRAGMENT) {
+ depth= IResource.DEPTH_ONE;
+ } else if (type == IJavaElement.JAVA_PROJECT) {
+ IMarker[] bpMarkers= res.findMarkers(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER, true, IResource.DEPTH_ONE);
+ info= accumulateProblems(bpMarkers, info, null);
+ }
+ } else if (type == IJavaElement.TYPE || type == IJavaElement.METHOD || type == IJavaElement.INITIALIZER) {
+ // we assume that only source elements can have markers
+ ICompilationUnit cu= ((IMember)element).getCompilationUnit();
+ if (cu != null) {
+ res= element.getUnderlyingResource();
+ range= ((IMember)element).getSourceRange();
+ }
+ }
+
+ if (res != null) {
+ IMarker[] markers= res.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, depth);
+ if (markers != null) {
+ info= accumulateProblems(markers, info, range);
+ }
+ }
+ } catch (CoreException e) {
+ JavaPlugin.log(e.getStatus());
+ }
+ return info;
+ }
+
+ private int accumulateProblems(IMarker[] markers, int info, ISourceRange range) {
+ if (markers != null) {
+ final int ERRORTICK_ALL= ERRORTICK_WARNING | ERRORTICK_ERROR;
+
+ for (int i= 0; i < markers.length && (info != ERRORTICK_ALL); i++) {
+ IMarker curr= markers[i];
+ if (range == null || isInRange(curr, range)) {
+ int priority= curr.getAttribute(IMarker.SEVERITY, -1);
+ if (priority == IMarker.SEVERITY_WARNING) {
+ info |= ERRORTICK_WARNING;
+ } else if (priority == IMarker.SEVERITY_ERROR) {
+ info |= ERRORTICK_ERROR;
+ }
+ }
+ }
+ }
+ return info;
+ }
+
+ private boolean isInRange(IMarker marker, ISourceRange range) {
+ int pos= marker.getAttribute(IMarker.CHAR_START, -1);
+ int offset= range.getOffset();
+ return (offset <= pos && offset + range.getLength() > pos);
+ }
+
+}
+
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/OverlayIconManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/OverlayIconManager.java
index 5c21326..790caaf 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/OverlayIconManager.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/OverlayIconManager.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemItemMapper.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemItemMapper.java
new file mode 100644
index 0000000..ec8d1db
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemItemMapper.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerFilter.java
new file mode 100644
index 0000000..cc44e75
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerFilter.java
Binary files differ
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
new file mode 100644
index 0000000..c796432
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
@@ -0,0 +1,130 @@
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.util.Set;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Widget;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+
+import org.eclipse.jdt.core.IJavaElement;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.util.JavaModelUtility;
+
+public class ProblemTreeViewer extends TreeViewer implements IProblemChangedListener {
+
+ private ProblemItemMapper fSeverityItemMapper;
+
+ /**
+ * @see TreeViewer#TreeViewer(Composite)
+ */
+ public ProblemTreeViewer(Composite parent) {
+ super(parent);
+ initMapper();
+ }
+
+ /**
+ * @see TreeViewer#TreeViewer(Composite, int)
+ */
+ public ProblemTreeViewer(Composite parent, int style) {
+ super(parent, style);
+ initMapper();
+ }
+
+ /**
+ * @see TreeViewer#TreeViewer(Tree)
+ */
+ public ProblemTreeViewer(Tree tree) {
+ super(tree);
+ initMapper();
+ }
+
+ private void initMapper() {
+ fSeverityItemMapper= new ProblemItemMapper();
+ }
+
+
+ /**
+ * @see IProblemChangedListener#problemsChanged
+ */
+ public void problemsChanged(final Set changed) {
+ Control control= getControl();
+ if (control != null && !control.isDisposed()) {
+ control.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ fSeverityItemMapper.problemsChanged(changed, (ILabelProvider)getLabelProvider());
+ }
+ });
+ }
+ }
+
+ /**
+ * Called to get the underlying resource of an element that can show
+ * error markers.
+ * If the element can not show error markers, return null.
+ */
+ protected IResource getUnderlyingResource(Object obj) throws CoreException {
+ if (obj instanceof IJavaElement) {
+ IJavaElement elem= (IJavaElement)obj;
+
+ int type= elem.getElementType();
+ if (type < IJavaElement.TYPE) {
+ return elem.getCorrespondingResource();
+ } else {
+ IJavaElement cu= JavaModelUtility.findElementOfKind(elem, IJavaElement.COMPILATION_UNIT);
+ if (cu != null) {
+ return cu.getCorrespondingResource();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @see TreeViewer#mapElement
+ */
+ protected void mapElement(Object element, Widget widget) {
+ super.mapElement(element, widget);
+ try {
+ IResource res= getUnderlyingResource(element);
+ if (res != null && widget instanceof Item) {
+ fSeverityItemMapper.addToMap(res, (Item)widget);
+ }
+ } catch (CoreException e) {
+ JavaPlugin.log(e.getStatus());
+ }
+ }
+
+ /**
+ * @see TreeViewer#unmapElement
+ */
+ protected void unmapElement(Object element) {
+ super.unmapElement(element);
+ try {
+ IResource res= getUnderlyingResource(element);
+ if (res != null) {
+ fSeverityItemMapper.removeFromMap(res, element);
+ }
+ } catch (CoreException e) {
+ JavaPlugin.log(e.getStatus());
+ }
+ }
+
+ /**
+ * @see TreeViewer#unmapAllElements
+ */
+ protected void unmapAllElements() {
+ super.unmapAllElements();
+ fSeverityItemMapper.clearMap();
+ }
+
+}
+
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
index 734bbf4..59d8359 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
@@ -11,21 +11,18 @@
import org.eclipse.swt.graphics.Image;
+import org.eclipse.core.resources.IStorage;
+
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.core.resources.IStorage;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.internal.ui.viewsupport.IErrorTickManager;
import org.eclipse.jdt.internal.ui.viewsupport.JavaImageLabelProvider;
import org.eclipse.jdt.internal.ui.viewsupport.JavaTextLabelProvider;
@@ -205,6 +202,10 @@
disposeJarEntryImages();
}
+ public void setErrorTickManager(IErrorTickManager manager) {
+ fImageLabelProvider.setErrorTickManager(manager);
+ }
+
/*
* Dispose the cached images for JarEntry files
*/