### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.ui
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java,v
retrieving revision 1.26
diff -u -r1.26 JavaUILabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java 28 Mar 2006 16:53:46 -0000 1.26
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java 14 Mar 2007 14:25:43 -0000
@@ -29,7 +29,7 @@
import org.eclipse.jdt.ui.JavaElementLabels;
-public class JavaUILabelProvider implements ILabelProvider, IColorProvider {
+public class JavaUILabelProvider implements ILabelProvider, IColorProvider, IRichLabelProvider {
protected ListenerList fListeners = new ListenerList();
@@ -147,7 +147,10 @@
if (fLabelDecorators != null && text.length() > 0) {
for (int i= 0; i < fLabelDecorators.size(); i++) {
ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
- text= decorator.decorateText(text, element);
+ String decorated= decorator.decorateText(text, element);
+ if (decorated != null) {
+ text= decorated;
+ }
}
}
return text;
@@ -162,10 +165,21 @@
if (result.length() == 0 && (element instanceof IStorage)) {
result= fStorageLabelProvider.getText(element);
}
-
return decorateText(result, element);
}
-
+
+ public ColoredString getRichTextLabel(Object element) {
+ ColoredString string= ColoredJavaElementLabels.getTextLabel(element, evaluateTextFlags(element) | ColoredJavaElementLabels.COLORIZE);
+ if (string.length() == 0 && (element instanceof IStorage)) {
+ string= new ColoredString(fStorageLabelProvider.getText(element));
+ }
+ String decorated= decorateText(string.getString(), element);
+ if (decorated != null) {
+ return ColoredJavaElementLabels.decorateColoredString(string, decorated, ColoredJavaElementLabels.DECORATIONS_COLOR);
+ }
+ return string;
+ }
+
/* (non-Javadoc)
* @see IBaseLabelProvider#dispose
*/
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/DecoratingJavaLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/DecoratingJavaLabelProvider.java,v
retrieving revision 1.12
diff -u -r1.12 DecoratingJavaLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/viewsupport/DecoratingJavaLabelProvider.java 11 Apr 2006 10:49:23 -0000 1.12
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/DecoratingJavaLabelProvider.java 14 Mar 2007 14:25:43 -0000
@@ -10,11 +10,11 @@
*******************************************************************************/
package org.eclipse.jdt.internal.ui.viewsupport;
-import org.eclipse.swt.graphics.Color;
-
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DecorationContext;
-import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelDecorator;
import org.eclipse.ui.PlatformUI;
@@ -22,12 +22,13 @@
import org.eclipse.jdt.internal.ui.packageview.HierarchicalDecorationContext;
-public class DecoratingJavaLabelProvider extends DecoratingLabelProvider implements IColorProvider {
+public class DecoratingJavaLabelProvider extends DecoratingLabelProvider implements IRichLabelProvider {
/**
* Decorating label provider for Java. Combines a JavaUILabelProvider
- * with problem and override indicuator with the workbench decorator (label
+ * with problem and override indicator with the workbench decorator (label
* decorator extension point).
+ * @param labelProvider the label provider to decorate
*/
public DecoratingJavaLabelProvider(JavaUILabelProvider labelProvider) {
this(labelProvider, true);
@@ -37,6 +38,8 @@
* Decorating label provider for Java. Combines a JavaUILabelProvider
* (if enabled with problem indicator) with the workbench
* decorator (label decorator extension point).
+ * @param labelProvider the label provider to decorate
+ * @param errorTick show error ticks
*/
public DecoratingJavaLabelProvider(JavaUILabelProvider labelProvider, boolean errorTick) {
this(labelProvider, errorTick, true);
@@ -46,6 +49,9 @@
* Decorating label provider for Java. Combines a JavaUILabelProvider
* (if enabled with problem indicator) with the workbench
* decorator (label decorator extension point).
+ * @param labelProvider the label provider to decorate
+ * @param errorTick show error ticks
+ * @param flatPackageMode configure flat package mode
*/
public DecoratingJavaLabelProvider(JavaUILabelProvider labelProvider, boolean errorTick, boolean flatPackageMode) {
super(labelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator());
@@ -66,21 +72,33 @@
setDecorationContext(HierarchicalDecorationContext.CONTEXT);
}
}
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
- */
- public Color getForeground(Object element) {
- // label provider is a JavaUILabelProvider
- return ((IColorProvider) getLabelProvider()).getForeground(element);
- }
/* (non-Javadoc)
- * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.IRichLabelProvider#getRichTextLabel(Object)
*/
- public Color getBackground(Object element) {
- // label provider is a JavaUILabelProvider
- return ((IColorProvider) getLabelProvider()).getBackground(element);
+ public ColoredString getRichTextLabel(Object element) {
+ ILabelProvider labelProvider= getLabelProvider();
+ if (labelProvider instanceof IRichLabelProvider) {
+ // get a rich label from the label decorator
+ IRichLabelProvider richLabelProvider= (IRichLabelProvider) labelProvider;
+ ColoredString richLabel= richLabelProvider.getRichTextLabel(element);
+ if (richLabel != null) {
+ String decorated= null;
+ ILabelDecorator labelDecorator= getLabelDecorator();
+ if (labelDecorator != null) {
+ if (labelDecorator instanceof LabelDecorator) {
+ decorated= ((LabelDecorator) labelDecorator).decorateText(richLabel.getString(), element, getDecorationContext());
+ } else {
+ decorated= labelDecorator.decorateText(richLabel.getString(), element);
+ }
+ }
+ if (decorated != null) {
+ return ColoredJavaElementLabels.decorateColoredString(richLabel, decorated, ColoredJavaElementLabels.DECORATIONS_COLOR);
+ }
+ return richLabel;
+ }
+ }
+ return null;
}
}
Index: ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java,v
retrieving revision 1.9
diff -u -r1.9 MethodsLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java 14 Oct 2005 12:14:24 -0000 1.9
+++ ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -26,6 +26,7 @@
import org.eclipse.jdt.ui.JavaElementLabels;
import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
/**
* Label provider for the hierarchy method viewers.
@@ -83,21 +84,40 @@
*/
public String getText(Object element) {
String text= super.getText(element);
+ String qualifier= getQualifier(element);
+ if (qualifier != null) {
+ return qualifier + text;
+ }
+ return text;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ ColoredString text= super.getRichTextLabel(element);
+ String qualifier= getQualifier(element);
+ if (qualifier != null) {
+ return new ColoredString(qualifier).append(text);
+ }
+ return text;
+
+ }
+
+ private String getQualifier(Object element) {
if (fShowDefiningType) {
try {
IType type= getDefiningType(element);
if (type != null) {
- StringBuffer buf= new StringBuffer(super.getText(type));
- buf.append(JavaElementLabels.CONCAT_STRING);
- buf.append(text);
- return buf.toString();
+ return super.getText(type) + JavaElementLabels.CONCAT_STRING;
}
} catch (JavaModelException e) {
}
}
- return text;
+ return null;
}
-
+
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
*/
Index: ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java,v
retrieving revision 1.72
diff -u -r1.72 MethodsViewer.java
--- ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java 21 Sep 2006 14:57:55 -0000 1.72
+++ ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java 14 Mar 2007 14:25:43 -0000
@@ -48,6 +48,7 @@
import org.eclipse.jdt.internal.ui.util.JavaUIHelp;
import org.eclipse.jdt.internal.ui.util.SelectionUtil;
import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer;
/**
@@ -98,6 +99,8 @@
showInheritedMethodsNoRedraw(false);
sortByDefiningTypeNoRedraw(false);
+ OwnerDrawSupport.install(this);
+
JavaUIHelp.setHelp(this, IJavaHelpContextIds.TYPE_HIERARCHY_VIEW);
}
Index: ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java,v
retrieving revision 1.48
diff -u -r1.48 TypeHierarchyViewer.java
--- ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java 21 Sep 2006 14:57:55 -0000 1.48
+++ ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java 14 Mar 2007 14:25:43 -0000
@@ -34,6 +34,7 @@
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.util.JavaUIHelp;
import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jdt.ui.JavaElementLabels;
@@ -62,6 +63,8 @@
}
});
+ OwnerDrawSupport.install(this);
+
JavaUIHelp.setHelp(this, IJavaHelpContextIds.TYPE_HIERARCHY_VIEW);
}
Index: ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java,v
retrieving revision 1.41
diff -u -r1.41 HierarchyLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java 17 Jun 2005 15:51:57 -0000 1.41
+++ ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -119,16 +119,7 @@
}
return true;
}
-
- /* (non-Javadoc)
- * @see ILabelProvider#getText
- */
- public String getText(Object element) {
- String text= super.getText(element);
- return decorateText(text, element);
- }
-
-
+
/* (non-Javadoc)
* @see ILabelProvider#getImage
*/
Index: ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java,v
retrieving revision 1.16
diff -u -r1.16 PostfixLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java 27 Apr 2005 16:04:47 -0000 1.16
+++ ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -21,6 +21,9 @@
import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredJavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
+
public class PostfixLabelProvider extends SearchLabelProvider {
private ITreeContentProvider fContentProvider;
@@ -38,8 +41,11 @@
public String getText(Object element) {
String labelWithCounts= getLabelWithCounts(element, internalGetText(element));
-
- StringBuffer res= new StringBuffer(labelWithCounts);
+ return labelWithCounts + getQualification(element);
+ }
+
+ private String getQualification(Object element) {
+ StringBuffer res= new StringBuffer();
ITreeContentProvider provider= (ITreeContentProvider) fPage.getViewer().getContentProvider();
Object visibleParent= provider.getParent(element);
@@ -54,7 +60,6 @@
}
return res.toString();
}
-
protected boolean hasChildren(Object element) {
ITreeContentProvider contentProvider= (ITreeContentProvider) fPage.getViewer().getContentProvider();
@@ -81,5 +86,14 @@
}
return false;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.IRichLabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ ColoredString coloredString= getColoredLabelWithCounts(element, super.getRichTextLabel(element));
+ coloredString.append(getQualification(element), ColoredJavaElementLabels.QUALIFIER_COLOR);
+ return coloredString;
+ }
}
Index: ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java,v
retrieving revision 1.66
diff -u -r1.66 JavaSearchResultPage.java
--- ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java 3 Oct 2006 16:17:12 -0000 1.66
+++ ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java 14 Mar 2007 14:25:42 -0000
@@ -32,7 +32,6 @@
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.util.TransferDragSourceListener;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -48,7 +47,6 @@
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.part.IPageSite;
@@ -85,6 +83,8 @@
import org.eclipse.jdt.internal.ui.dnd.ResourceTransferDragAdapter;
import org.eclipse.jdt.internal.ui.packageview.SelectionTransferDragAdapter;
import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
@@ -135,6 +135,8 @@
private SelectionDispatchAction fCopyQualifiedNameAction;
+ private SortingLabelProvider fSortingLabelProvider;
+
private int fCurrentGrouping;
private static final String[] SHOW_IN_TARGETS= new String[] { JavaUI.ID_PACKAGES , IPageLayout.ID_RES_NAV };
@@ -309,11 +311,11 @@
protected void configureTableViewer(TableViewer viewer) {
viewer.setUseHashlookup(true);
- SortingLabelProvider sortingLabelProvider= new SortingLabelProvider(this);
- viewer.setLabelProvider(new ColorDecoratingLabelProvider(sortingLabelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
+ fSortingLabelProvider= new SortingLabelProvider(this);
+ viewer.setLabelProvider(new DecoratingJavaLabelProvider(fSortingLabelProvider, false));
fContentProvider=new JavaSearchTableContentProvider(this);
viewer.setContentProvider(fContentProvider);
- viewer.setComparator(new DecoratorIgnoringViewerSorter(sortingLabelProvider));
+ viewer.setComparator(new DecoratorIgnoringViewerSorter(fSortingLabelProvider));
setSortOrder(fCurrentSortOrder);
addDragAdapters(viewer);
}
@@ -322,29 +324,34 @@
PostfixLabelProvider postfixLabelProvider= new PostfixLabelProvider(this);
viewer.setUseHashlookup(true);
viewer.setComparator(new DecoratorIgnoringViewerSorter(postfixLabelProvider));
- viewer.setLabelProvider(new ColorDecoratingLabelProvider(postfixLabelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
+ viewer.setLabelProvider(new DecoratingJavaLabelProvider(postfixLabelProvider, false));
fContentProvider= new LevelTreeContentProvider(this, fCurrentGrouping);
viewer.setContentProvider(fContentProvider);
addDragAdapters(viewer);
}
protected TreeViewer createTreeViewer(Composite parent) {
- return new ProblemTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ ProblemTreeViewer problemTreeViewer= new ProblemTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ OwnerDrawSupport.install(problemTreeViewer);
+ return problemTreeViewer;
}
protected TableViewer createTableViewer(Composite parent) {
- return new ProblemTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ ProblemTableViewer problemTableViewer= new ProblemTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ OwnerDrawSupport.install(problemTableViewer);
+ return problemTableViewer;
}
void setSortOrder(int order) {
- fCurrentSortOrder= order;
- StructuredViewer viewer= getViewer();
- viewer.getControl().setRedraw(false);
- DecoratingLabelProvider dlp= (DecoratingLabelProvider) viewer.getLabelProvider();
- ((SortingLabelProvider)dlp.getLabelProvider()).setOrder(order);
- viewer.getControl().setRedraw(true);
- viewer.refresh();
- getSettings().put(KEY_SORTING, fCurrentSortOrder);
+ if (fSortingLabelProvider != null) {
+ fCurrentSortOrder= order;
+ StructuredViewer viewer= getViewer();
+ //viewer.getControl().setRedraw(false);
+ fSortingLabelProvider.setOrder(order);
+ //viewer.getControl().setRedraw(true);
+ viewer.refresh();
+ getSettings().put(KEY_SORTING, fCurrentSortOrder);
+ }
}
public void init(IPageSite site) {
Index: ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java,v
retrieving revision 1.11
diff -u -r1.11 SearchLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java 27 Apr 2005 16:04:47 -0000 1.11
+++ ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -43,6 +43,8 @@
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredJavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
@@ -120,6 +122,15 @@
return res;
}
+ protected final ColoredString getColoredLabelWithCounts(Object element, ColoredString coloredName) {
+ String name= coloredName.getString();
+ String decorated= getLabelWithCounts(element, name);
+ if (decorated.length() > name.length()) {
+ ColoredJavaElementLabels.decorateColoredString(coloredName, decorated, ColoredJavaElementLabels.NUMBER_OF_MATCHES_COLOR);
+ }
+ return coloredName;
+ }
+
protected final String getLabelWithCounts(Object element, String elementName) {
int matchCount= fPage.getDisplayedMatchCount(element);
int potentialCount= getNumberOfPotentialMatches(element);
Index: ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java,v
retrieving revision 1.12
diff -u -r1.12 SortingLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java 27 Apr 2005 16:04:47 -0000 1.12
+++ ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -14,14 +14,14 @@
import org.eclipse.swt.graphics.Image;
-import org.eclipse.jface.viewers.IColorProvider;
-
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.ui.JavaElementLabels;
-public class SortingLabelProvider extends SearchLabelProvider implements IColorProvider {
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
+
+public class SortingLabelProvider extends SearchLabelProvider {
public static final int SHOW_ELEMENT_CONTAINER= 1; // default
public static final int SHOW_CONTAINER_ELEMENT= 2;
public static final int SHOW_PATH= 3;
@@ -40,17 +40,28 @@
}
public final String getText(Object element) {
- return getLabelWithCounts(element, internalGetText(element));
+ if (element instanceof IImportDeclaration)
+ element= ((IImportDeclaration)element).getParent().getParent();
+
+ String text= super.getText(element);
+ if (text.length() > 0) {
+ return getLabelWithCounts(element, text);
+ }
+ return getParticipantText(element);
}
-
- private String internalGetText(Object o) {
- if (o instanceof IImportDeclaration)
- o= ((IImportDeclaration)o).getParent().getParent();
-
- String text= super.getText(o);
- if (text != null && (text.length() > 0))
- return text;
- return getParticipantText(o);
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ if (element instanceof IImportDeclaration)
+ element= ((IImportDeclaration)element).getParent().getParent();
+
+ ColoredString text= super.getRichTextLabel(element);
+ if (text.length() > 0) {
+ return getColoredLabelWithCounts(element, text);
+ }
+ return new ColoredString(getParticipantText(element));
}
public void setOrder(int orderFlag) {
Index: ui/org/eclipse/jdt/internal/ui/search/ColorDecoratingLabelProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/search/ColorDecoratingLabelProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/search/ColorDecoratingLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/search/ColorDecoratingLabelProvider.java 17 Jun 2005 15:51:51 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.search;
-
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Color;
-
-public class ColorDecoratingLabelProvider extends DecoratingLabelProvider implements IColorProvider {
-
- public ColorDecoratingLabelProvider(ILabelProvider provider, ILabelDecorator decorator) {
- super(provider, decorator);
- }
-
- public Color getForeground(Object element) {
- ILabelProvider labelProvider = getLabelProvider();
- if (labelProvider instanceof IColorProvider)
- return ((IColorProvider)labelProvider).getForeground(element);
- return null;
- }
-
- public Color getBackground(Object element) {
- ILabelProvider labelProvider = getLabelProvider();
- if (labelProvider instanceof IColorProvider)
- return ((IColorProvider)labelProvider).getBackground(element);
- return null;
- }
-}
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java,v
retrieving revision 1.26
diff -u -r1.26 PackageExplorerLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java 19 Dec 2006 09:27:00 -0000 1.26
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -10,15 +10,28 @@
*******************************************************************************/
package org.eclipse.jdt.internal.ui.packageview;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.resources.IFolder;
+import org.eclipse.swt.graphics.Image;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+
+import org.eclipse.ui.IWorkingSet;
import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.ui.JavaElementLabels;
+
import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
/**
* Provides the labels for the Package Explorer.
@@ -31,20 +44,33 @@
public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
private PackageExplorerContentProvider fContentProvider;
-
+ private Map fWorkingSetImages;
+
private boolean fIsFlatLayout;
private PackageExplorerProblemsDecorator fProblemDecorator;
- public PackageExplorerLabelProvider(long textFlags, int imageFlags, PackageExplorerContentProvider cp) {
- super(textFlags, imageFlags);
+ public PackageExplorerLabelProvider(PackageExplorerContentProvider cp) {
+ super(DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED | JavaElementLabels.ALL_CATEGORY, DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS);
+
fProblemDecorator= new PackageExplorerProblemsDecorator();
addLabelDecorator(fProblemDecorator);
Assert.isNotNull(cp);
fContentProvider= cp;
+ fWorkingSetImages= null;
}
-
-
- public String getText(Object element) {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ String text= getSpecificText(element);
+ if (text != null) {
+ return new ColoredString(decorateText(text, element));
+ }
+ return super.getRichTextLabel(element);
+ }
+
+ private String getSpecificText(Object element) {
if (!fIsFlatLayout && element instanceof IPackageFragment) {
IPackageFragment fragment = (IPackageFragment) element;
Object parent= fContentProvider.getHierarchicalPackageParent(fragment);
@@ -53,6 +79,16 @@
} else if (parent instanceof IFolder) { // bug 152735
return getNameDelta((IFolder) parent, fragment);
}
+ } else if (element instanceof IWorkingSet) {
+ return ((IWorkingSet) element).getLabel();
+ }
+ return null;
+ }
+
+ public String getText(Object element) {
+ String text= getSpecificText(element);
+ if (text != null) {
+ return decorateText(text, element);
}
return super.getText(element);
}
@@ -81,8 +117,34 @@
return fragment.getElementName();
}
+ public Image getImage(Object element) {
+ if (element instanceof IWorkingSet) {
+ ImageDescriptor image= ((IWorkingSet)element).getImageDescriptor();
+ if (fWorkingSetImages == null) {
+ fWorkingSetImages= new HashMap();
+ }
+
+ Image result= (Image) fWorkingSetImages.get(image);
+ if (result == null) {
+ result= image.createImage();
+ fWorkingSetImages.put(image, result);
+ }
+ return decorateImage(result, element);
+ }
+ return super.getImage(element);
+ }
+
public void setIsFlatLayout(boolean state) {
fIsFlatLayout= state;
fProblemDecorator.setIsFlatLayout(state);
}
+
+ public void dispose() {
+ if (fWorkingSetImages != null) {
+ for (Iterator iter= fWorkingSetImages.values().iterator(); iter.hasNext();) {
+ ((Image)iter.next()).dispose();
+ }
+ }
+ super.dispose();
+ }
}
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java,v
retrieving revision 1.293
diff -u -r1.293 PackageExplorerPart.java
--- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java 8 Mar 2007 11:08:16 -0000 1.293
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java 14 Mar 2007 14:25:42 -0000
@@ -146,7 +146,7 @@
import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
import org.eclipse.jdt.internal.ui.viewsupport.FilterUpdater;
import org.eclipse.jdt.internal.ui.viewsupport.IViewPartInputProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jdt.internal.ui.viewsupport.StatusBarUpdater;
import org.eclipse.jdt.internal.ui.workingsets.ConfigureWorkingSetAction;
@@ -188,7 +188,8 @@
private int fRootMode;
private WorkingSetModel fWorkingSetModel;
- private PackageExplorerLabelProvider fLabelProvider;
+ private PackageExplorerLabelProvider fLabelProvider;
+ private DecoratingJavaLabelProvider fDecoratingLabelProvider;
private PackageExplorerContentProvider fContentProvider;
private FilterUpdater fFilterUpdater;
@@ -245,6 +246,7 @@
public PackageExplorerProblemTreeViewer(Composite parent, int style) {
super(parent, style);
fPendingRefreshes= Collections.synchronizedList(new ArrayList());
+ OwnerDrawSupport.install(this);
}
public void add(Object parentElement, Object[] childElements) {
if (fPendingRefreshes.contains(parentElement)) {
@@ -646,7 +648,8 @@
fLabelProvider= createLabelProvider();
fLabelProvider.setIsFlatLayout(fIsCurrentLayoutFlat);
- fViewer.setLabelProvider(new DecoratingJavaLabelProvider(fLabelProvider, false, fIsCurrentLayoutFlat));
+ fDecoratingLabelProvider= new DecoratingJavaLabelProvider(fLabelProvider, false, fIsCurrentLayoutFlat);
+ fViewer.setLabelProvider(fDecoratingLabelProvider);
// problem decoration provided by PackageLabelProvider
}
@@ -673,7 +676,7 @@
if (fViewer != null) {
fContentProvider.setIsFlatLayout(isFlatLayout());
fLabelProvider.setIsFlatLayout(isFlatLayout());
- ((DecoratingJavaLabelProvider) fViewer.getLabelProvider()).setFlatPackageMode(isFlatLayout());
+ fDecoratingLabelProvider.setFlatPackageMode(isFlatLayout());
fViewer.getControl().setRedraw(false);
fViewer.refresh();
@@ -695,14 +698,7 @@
}
private PackageExplorerLabelProvider createLabelProvider() {
- if (showProjects())
- return new PackageExplorerLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED | JavaElementLabels.ALL_CATEGORY,
- AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS,
- fContentProvider);
- else
- return new WorkingSetAwareLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED,
- AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS,
- fContentProvider);
+ return new PackageExplorerLabelProvider(fContentProvider);
}
private IElementComparer createElementComparer() {
Index: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareLabelProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareLabelProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareLabelProvider.java 22 Nov 2006 16:58:05 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.packageview;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-
-import org.eclipse.ui.IWorkingSet;
-
-public class WorkingSetAwareLabelProvider extends PackageExplorerLabelProvider {
-
- private Map fImages= new HashMap();
-
- public WorkingSetAwareLabelProvider(long textFlags, int imageFlags, PackageExplorerContentProvider cp) {
- super(textFlags, imageFlags, cp);
- }
-
- /**
- * {@inheritDoc}
- */
- public String getText(Object element) {
- if (element instanceof IWorkingSet) {
- return decorateText(((IWorkingSet)element).getLabel(), element);
- }
- return super.getText(element);
- }
-
- /**
- * {@inheritDoc}
- */
- public Image getImage(Object element) {
- if (element instanceof IWorkingSet) {
- ImageDescriptor image= ((IWorkingSet)element).getImageDescriptor();
- Image result= (Image)fImages.get(image);
- if (result == null) {
- result= image.createImage();
- fImages.put(image, result);
- }
- return decorateImage(result, element);
- }
- return super.getImage(element);
- }
-
- /**
- * {@inheritDoc}
- */
- public void dispose() {
- for (Iterator iter= fImages.values().iterator(); iter.hasNext();) {
- ((Image)iter.next()).dispose();
- }
- super.dispose();
- }
-}
Index: ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java,v
retrieving revision 1.35
diff -u -r1.35 TypesView.java
--- ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java 2 Mar 2007 14:26:20 -0000 1.35
+++ ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java 14 Mar 2007 14:25:42 -0000
@@ -15,11 +15,13 @@
import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.widgets.Composite;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.ui.IActionBars;
@@ -35,15 +37,16 @@
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
+
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.actions.SelectAllAction;
import org.eclipse.jdt.internal.ui.filters.NonJavaElementFilter;
import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider;
-
-import org.eclipse.jdt.ui.JavaElementLabels;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
public class TypesView extends JavaBrowsingPart {
private SelectAllAction fSelectAllAction;
@@ -60,6 +63,13 @@
AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
}
+ protected StructuredViewer createViewer(Composite parent) {
+ StructuredViewer viewer= super.createViewer(parent);
+ OwnerDrawSupport.install(viewer);
+ return viewer;
+ }
+
+
/**
* Answer the property defined by key.
*/
Index: ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java,v
retrieving revision 1.12
diff -u -r1.12 PackagesViewTreeViewer.java
--- ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java 19 Dec 2006 10:36:30 -0000 1.12
+++ ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java 14 Mar 2007 14:25:42 -0000
@@ -22,6 +22,7 @@
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
/**
@@ -31,6 +32,7 @@
public PackagesViewTreeViewer(Composite parent, int style) {
super(parent, style);
+ OwnerDrawSupport.install(this);
}
/*
Index: ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java,v
retrieving revision 1.57
diff -u -r1.57 MembersView.java
--- ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java 2 Mar 2007 14:26:20 -0000 1.57
+++ ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java 14 Mar 2007 14:25:42 -0000
@@ -43,10 +43,12 @@
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.actions.*;
+import org.eclipse.jdt.internal.ui.actions.CategoryFilterActionGroup;
+import org.eclipse.jdt.internal.ui.actions.LexicalSortingAction;
import org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferenceCache;
import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
public class MembersView extends JavaBrowsingPart implements IPropertyChangeListener {
@@ -113,6 +115,7 @@
*/
protected StructuredViewer createViewer(Composite parent) {
ProblemTreeViewer viewer= new ProblemTreeViewer(parent, SWT.MULTI);
+ OwnerDrawSupport.install(viewer);
fMemberFilterActionGroup= new MemberFilterActionGroup(viewer, JavaUI.ID_MEMBERS_VIEW);
return viewer;
}
Index: ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java,v
retrieving revision 1.8
diff -u -r1.8 PackagesViewTableViewer.java
--- ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java 17 Jun 2005 15:51:52 -0000 1.8
+++ ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java 14 Mar 2007 14:25:42 -0000
@@ -19,6 +19,7 @@
import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer;
/**
@@ -28,6 +29,7 @@
public PackagesViewTableViewer(Composite parent, int style) {
super(parent, style);
+ OwnerDrawSupport.install(this);
}
public void mapElement(Object element, Widget item) {
Index: ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java,v
retrieving revision 1.32
diff -u -r1.32 ProjectsView.java
--- ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java 12 May 2006 13:40:52 -0000 1.32
+++ ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java 14 Mar 2007 14:25:42 -0000
@@ -39,6 +39,7 @@
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.viewsupport.FilterUpdater;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jdt.ui.JavaUI;
@@ -56,6 +57,7 @@
*/
protected StructuredViewer createViewer(Composite parent) {
ProblemTreeViewer result= new ProblemTreeViewer(parent, SWT.MULTI);
+ OwnerDrawSupport.install(result);
fFilterUpdater= new FilterUpdater(result);
ResourcesPlugin.getWorkspace().addResourceChangeListener(fFilterUpdater);
return result;
Index: ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java,v
retrieving revision 1.17
diff -u -r1.17 CallHierarchyViewer.java
--- ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java 28 Mar 2006 16:53:45 -0000 1.17
+++ ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java 14 Mar 2007 14:25:42 -0000
@@ -30,6 +30,8 @@
import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
+
class CallHierarchyViewer extends TreeViewer {
private CallHierarchyViewPart fPart;
@@ -58,6 +60,8 @@
fOpen.run();
}
});
+
+ OwnerDrawSupport.install(this);
clearViewer();
}
Index: ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java,v
retrieving revision 1.12
diff -u -r1.12 CallHierarchyLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java 13 Apr 2005 17:35:11 -0000 1.12
+++ ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -14,18 +14,21 @@
import java.util.Collection;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
+import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
import org.eclipse.jdt.internal.corext.util.Messages;
import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredJavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
+
class CallHierarchyLabelProvider extends AppearanceAwareLabelProvider {
private static final long TEXTFLAGS= DEFAULT_TEXTFLAGS | JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.P_COMPRESSED;
private static final int IMAGEFLAGS= DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS;
@@ -60,26 +63,40 @@
* @see ILabelProvider#getText(Object)
*/
public String getText(Object element) {
- if (element instanceof MethodWrapper) {
- MethodWrapper methodWrapper = (MethodWrapper) element;
-
- if (methodWrapper.getMember() != null) {
- return getElementLabel(methodWrapper);
- } else {
- return CallHierarchyMessages.CallHierarchyLabelProvider_root;
- }
- } else if (element == TreeTermination.SEARCH_CANCELED) {
+ if (element instanceof MethodWrapper && ((MethodWrapper) element).getMember() != null) {
+ return getElementLabel((MethodWrapper) element);
+ }
+ return getSpecialLabel(element);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ if (element instanceof MethodWrapper && ((MethodWrapper) element).getMember() != null) {
+ MethodWrapper wrapper= (MethodWrapper) element;
+ String decorated= getElementLabel(wrapper);
+ ColoredString text= super.getRichTextLabel(wrapper.getMember());
+ return ColoredJavaElementLabels.decorateColoredString(text, decorated, ColoredJavaElementLabels.NUMBER_OF_MATCHES_COLOR);
+ }
+ return new ColoredString(getSpecialLabel(element));
+ }
+
+ private String getSpecialLabel(Object element) {
+ if (element instanceof MethodWrapper) {
+ return CallHierarchyMessages.CallHierarchyLabelProvider_root;
+ } else if (element == TreeTermination.SEARCH_CANCELED) {
return CallHierarchyMessages.CallHierarchyLabelProvider_searchCanceled;
} else if (isPendingUpdate(element)) {
return CallHierarchyMessages.CallHierarchyLabelProvider_updatePending;
}
-
return CallHierarchyMessages.CallHierarchyLabelProvider_noMethodSelected;
}
-
+
private boolean isPendingUpdate(Object element) {
return element instanceof IWorkbenchAdapter;
}
+
private String getElementLabel(MethodWrapper methodWrapper) {
String label = super.getText(methodWrapper.getMember());
Index: ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java,v
retrieving revision 1.4
diff -u -r1.4 JavaNavigatorLabelProvider.java
--- ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java 18 May 2006 10:28:43 -0000 1.4
+++ ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java 14 Mar 2007 14:25:42 -0000
@@ -33,8 +33,6 @@
import org.eclipse.jdt.internal.ui.navigator.IExtensionStateConstants.Values;
import org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider;
import org.eclipse.jdt.internal.ui.packageview.PackageExplorerLabelProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
-import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
/**
* Provides the labels for the Project Explorer.
@@ -92,14 +90,7 @@
}
private PackageExplorerLabelProvider createLabelProvider() {
-
- return new PackageExplorerLabelProvider(
- AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
- | JavaElementLabels.P_COMPRESSED,
- AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS
- | JavaElementImageProvider.SMALL_ICONS,
- fContentProvider);
-
+ return new PackageExplorerLabelProvider(fContentProvider);
}
public void dispose() {
@@ -160,7 +151,7 @@
// Taken from StatusBarUpdater
- protected String formatMessage(Object element) {
+ private String formatMessage(Object element) {
if (element instanceof IJavaElement) {
return formatJavaElementMessage((IJavaElement) element);
} else if (element instanceof IResource) {
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/OwnerDrawSupport.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/viewsupport/OwnerDrawSupport.java
diff -N ui/org/eclipse/jdt/internal/ui/viewsupport/OwnerDrawSupport.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/OwnerDrawSupport.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+public class OwnerDrawSupport {
+ private static final String PREF="org.eclipse.jdt.ui.coloredlabels"; //$NON-NLS-1$
+
+ private final StructuredViewer fViewer;
+ private final Point fBoundOffset;
+
+ private OwnerDrawSupport(StructuredViewer viewer) {
+ this(viewer, new Point(2, 2));
+ }
+
+ private OwnerDrawSupport(StructuredViewer viewer, Point boundOffset) {
+ fViewer= viewer;
+ fBoundOffset= boundOffset;
+ }
+
+ private Listener fPaintListener= new Listener() {
+ public void handleEvent(Event event) {
+ performPaint(event);
+ }
+ };
+
+ public void installOwnerDraw() {
+ Control control= fViewer.getControl();
+ control.addListener(SWT.PaintItem, fPaintListener);
+ }
+
+ public void uninstallOwnerDraw() {
+ Control control= fViewer.getControl();
+ control.removeListener(SWT.PaintItem, fPaintListener);
+ }
+
+ private void performPaint(Event event) {
+ if ((event.detail & SWT.SELECTED) != 0) {
+ return;
+ }
+
+ IBaseLabelProvider labelProvider= fViewer.getLabelProvider();
+ if (labelProvider instanceof IRichLabelProvider) {
+ IRichLabelProvider richLabelProvider= (IRichLabelProvider) labelProvider;
+ Widget item= event.item;
+ ColoredString richLabel= richLabelProvider.getRichTextLabel(item.getData());
+ if (richLabel != null) {
+ if (item instanceof TreeItem) {
+ Rectangle bounds= ((TreeItem) item).getBounds();
+ processRichLabel(event.gc, bounds.x + fBoundOffset.x, bounds.y + fBoundOffset.y, richLabel);
+ } else if (item instanceof TableItem) {
+ Rectangle bounds= ((TableItem) item).getBounds();
+ processRichLabel(event.gc, bounds.x +2, bounds.y + 2, richLabel);
+ }
+ }
+ }
+ }
+
+ private void processRichLabel(GC gc, int x, int y, ColoredString richLabel) {
+ String text= richLabel.getString();
+
+ int offsetProcessed= 0;
+ Iterator ranges= richLabel.getRanges();
+ while (ranges.hasNext()) {
+ ColoredString.ColorRange curr= (ColoredString.ColorRange) ranges.next();
+ if (offsetProcessed < curr.offset) {
+ x= draw(gc, x, y, text.substring(offsetProcessed, curr.offset), 0, 0);
+ }
+ x= draw(gc, x, y, text.substring(curr.offset, curr.offset + curr.length), curr.foregroundColor, curr.backgroundColor);
+ offsetProcessed= curr.offset + curr.length;
+ }
+ }
+
+ private int draw(GC gc, int x, int y, String text, int foregroundColor, int backgroundColor) {
+ Point p= gc.textExtent(text);
+ if (foregroundColor > 0 || backgroundColor > 0) {
+ gc.setForeground(getForegroundColor(gc, foregroundColor));
+ gc.drawText(text, x, y, SWT.NONE);
+ }
+ return x + p.x;
+ }
+
+ private Color getForegroundColor(GC gc, int color) {
+ switch (color) {
+ case 0:
+ return gc.getDevice().getSystemColor(SWT.COLOR_LIST_FOREGROUND);
+ case 1:
+ return gc.getDevice().getSystemColor(SWT.COLOR_DARK_GRAY);
+ case 2:
+ return gc.getDevice().getSystemColor(SWT.COLOR_DARK_BLUE);
+ case 3:
+ return gc.getDevice().getSystemColor(SWT.COLOR_GRAY);
+ case 4:
+ return gc.getDevice().getSystemColor(SWT.COLOR_DARK_RED);
+ case 5:
+ return gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN);
+ default:
+ return gc.getDevice().getSystemColor(SWT.COLOR_RED);
+ }
+ }
+
+ public static void install(StructuredViewer viewer) {
+ String property= System.getProperty(PREF, "false"); //$NON-NLS-1$
+ if (Boolean.valueOf(property).booleanValue()) {
+ OwnerDrawSupport support= new OwnerDrawSupport(viewer);
+ support.installOwnerDraw();
+ return;
+ }
+ int index= property.indexOf(':');
+ if (index != -1) {
+ try {
+ int x= Integer.parseInt(property.substring(0, index));
+ int y= Integer.parseInt(property.substring(index + 1));
+ OwnerDrawSupport support= new OwnerDrawSupport(viewer, new Point(x, y));
+ support.installOwnerDraw();
+ } catch (NumberFormatException e) {
+ JavaPlugin.logErrorMessage("Invalid arguments for " + PREF); //$NON-NLS-1$
+ }
+ }
+ }
+
+}
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredString.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredString.java
diff -N ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredString.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredString.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+public class ColoredString {
+
+ private StringBuffer fBuffer;
+ private ArrayList fRanges;
+
+ public ColoredString() {
+ fBuffer= new StringBuffer();
+ fRanges= new ArrayList(5);
+ }
+
+ public ColoredString(String text) {
+ this(text, 0, 0);
+ }
+
+ public ColoredString(String text, int foregroundColor, int backgroundColor) {
+ this();
+ append(text, foregroundColor, backgroundColor);
+ }
+
+ public String getString() {
+ return fBuffer.toString();
+ }
+
+ public int length() {
+ return fBuffer.length();
+ }
+
+ public Iterator getRanges() {
+ return fRanges.iterator();
+ }
+
+ public ColoredString append(String text) {
+ return append(text, 0, 0);
+ }
+
+ public ColoredString append(char ch) {
+ return append(String.valueOf(ch), 0, 0);
+ }
+
+ public ColoredString append(ColoredString string) {
+ int offset= fBuffer.length();
+ fBuffer.append(string.getString());
+ for (Iterator iterator= string.getRanges(); iterator.hasNext();) {
+ ColorRange curr= (ColorRange) iterator.next();
+ fRanges.add(new ColorRange(offset + curr.offset, curr.length, curr.foregroundColor, curr.backgroundColor));
+ }
+ return this;
+ }
+
+ public ColoredString append(String text, int foregroundColor) {
+ return append(text, foregroundColor, 0);
+ }
+
+ public ColoredString append(String text, int foregroundColor, int backgroundColor) {
+ if (text.length() == 0)
+ return this;
+
+ int offset= fBuffer.length();
+ fBuffer.append(text);
+ if (foregroundColor != 0 || backgroundColor != 0) {
+ if (!fRanges.isEmpty()) {
+ ColorRange last= (ColorRange) fRanges.get(fRanges.size() - 1);
+ if (last.offset + last.length == offset && last.foregroundColor == foregroundColor && last.backgroundColor == backgroundColor) {
+ last.length += text.length();
+ return this;
+ }
+ }
+ fRanges.add(new ColorRange(offset, text.length(), foregroundColor, backgroundColor));
+ }
+ return this;
+ }
+
+ public void colorize(int offset, int length, int foregroundColor, int backgroundColor) {
+ if (offset < 0 || offset + length > fBuffer.length()) {
+ throw new IllegalArgumentException("Invalid offset (" + offset + ") or length (" + length + ")"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+ }
+
+
+ int insertPos= 0;
+ for (int i= 0; i < fRanges.size(); i++) {
+ ColorRange curr= (ColorRange) fRanges.get(i);
+ if (curr.offset + curr.length <= offset) {
+ insertPos= i + 1;
+ }
+ }
+ if (insertPos < fRanges.size()) {
+ ColorRange curr= (ColorRange) fRanges.get(insertPos);
+ if (curr.offset > offset + length) {
+ throw new IllegalArgumentException("Overlapping ranges"); //$NON-NLS-1$
+ }
+ }
+ fRanges.add(insertPos, new ColorRange(offset, length, foregroundColor, backgroundColor));
+ }
+
+ public static class ColorRange {
+ public int offset;
+ public int length;
+ public int foregroundColor;
+ public int backgroundColor;
+
+ public ColorRange(int offset, int length, int foregroundColor, int backgroundColor) {
+ this.offset= offset;
+ this.length= length;
+ this.foregroundColor= foregroundColor;
+ this.backgroundColor= backgroundColor;
+ }
+ }
+}
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/IRichLabelProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/viewsupport/IRichLabelProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/viewsupport/IRichLabelProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/IRichLabelProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+
+public interface IRichLabelProvider extends ILabelProvider {
+
+ ColoredString getRichTextLabel(Object object);
+
+}
Index: ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredJavaElementLabels.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredJavaElementLabels.java
diff -N ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredJavaElementLabels.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredJavaElementLabels.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,973 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import org.eclipse.core.runtime.IPath;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.ui.model.IWorkbenchAdapter;
+
+import org.eclipse.jdt.core.BindingKey;
+import org.eclipse.jdt.core.ClasspathContainerInitializer;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IClassFile;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IInitializer;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.JavaUIMessages;
+
+public class ColoredJavaElementLabels {
+
+ public static final int QUALIFIER_COLOR= 1;
+ public static final int NUMBER_OF_MATCHES_COLOR= 2;
+ public static final int DECORATIONS_COLOR= 4;
+ public static final int FILE_SUFFIX_COLOR= 0;
+
+ public final static long COLORIZE= 1L << 55;
+
+
+ private final static long QUALIFIER_FLAGS= JavaElementLabels.P_COMPRESSED | JavaElementLabels.USE_RESOLVED;
+
+
+ private static final boolean getFlag(long flags, long flag) {
+ return (flags & flag) != 0;
+ }
+
+ /**
+ * Returns the label of the given object. The object must be of type {@link IJavaElement} or adapt to {@link IWorkbenchAdapter}. The empty string is returned
+ * if the element type is not known.
+ * @param obj Object to get the label from.
+ * @param flags The rendering flags
+ * @return Returns the label or the empty string if the object type is not supported.
+ */
+ public static ColoredString getTextLabel(Object obj, long flags) {
+ if (obj instanceof IJavaElement) {
+ return getElementLabel((IJavaElement) obj, flags);
+ } else if (obj instanceof IResource) {
+ ColoredString result= new ColoredString(((IResource) obj).getName());
+ if (obj instanceof IFile && getFlag(flags, COLORIZE) && FILE_SUFFIX_COLOR != 0) {
+ int extLen= ((IFile) obj).getFileExtension().length();
+ result.colorize(result.length() - extLen, extLen, FILE_SUFFIX_COLOR, 0);
+ }
+ return result;
+ }
+ return new ColoredString(JavaElementLabels.getTextLabel(obj, flags), 0, 0);
+ }
+
+ /**
+ * Returns the label for a Java element with the flags as defined by this class.
+ * @param element The element to render.
+ * @param flags The rendering flags.
+ * @return the label of the Java element
+ */
+ public static ColoredString getElementLabel(IJavaElement element, long flags) {
+ ColoredString result= new ColoredString();
+ getElementLabel(element, flags, result);
+ return result;
+ }
+
+ /**
+ * Returns the label for a Java element with the flags as defined by this class.
+ * @param element The element to render.
+ * @param flags The rendering flags.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getElementLabel(IJavaElement element, long flags, ColoredString result) {
+ int type= element.getElementType();
+ IPackageFragmentRoot root= null;
+
+ if (type != IJavaElement.JAVA_MODEL && type != IJavaElement.JAVA_PROJECT && type != IJavaElement.PACKAGE_FRAGMENT_ROOT)
+ root= JavaModelUtil.getPackageFragmentRoot(element);
+ if (root != null && getFlag(flags, JavaElementLabels.PREPEND_ROOT_PATH)) {
+ getPackageFragmentRootLabel(root, JavaElementLabels.ROOT_QUALIFIED, result);
+ result.append(JavaElementLabels.CONCAT_STRING);
+ }
+
+ switch (type) {
+ case IJavaElement.METHOD:
+ getMethodLabel((IMethod) element, flags, result);
+ break;
+ case IJavaElement.FIELD:
+ getFieldLabel((IField) element, flags, result);
+ break;
+ case IJavaElement.LOCAL_VARIABLE:
+ getLocalVariableLabel((ILocalVariable) element, flags, result);
+ break;
+ case IJavaElement.INITIALIZER:
+ getInitializerLabel((IInitializer) element, flags, result);
+ break;
+ case IJavaElement.TYPE:
+ getTypeLabel((IType) element, flags, result);
+ break;
+ case IJavaElement.CLASS_FILE:
+ getClassFileLabel((IClassFile) element, flags, result);
+ break;
+ case IJavaElement.COMPILATION_UNIT:
+ getCompilationUnitLabel((ICompilationUnit) element, flags, result);
+ break;
+ case IJavaElement.PACKAGE_FRAGMENT:
+ getPackageFragmentLabel((IPackageFragment) element, flags, result);
+ break;
+ case IJavaElement.PACKAGE_FRAGMENT_ROOT:
+ getPackageFragmentRootLabel((IPackageFragmentRoot) element, flags, result);
+ break;
+ case IJavaElement.IMPORT_CONTAINER:
+ case IJavaElement.IMPORT_DECLARATION:
+ case IJavaElement.PACKAGE_DECLARATION:
+ getDeclarationLabel(element, flags, result);
+ break;
+ case IJavaElement.JAVA_PROJECT:
+ case IJavaElement.JAVA_MODEL:
+ result.append(element.getElementName());
+ break;
+ default:
+ result.append(element.getElementName());
+ }
+
+ if (root != null && getFlag(flags, JavaElementLabels.APPEND_ROOT_PATH)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getPackageFragmentRootLabel(root, JavaElementLabels.ROOT_QUALIFIED, result);
+
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+
+ }
+ }
+
+ /**
+ * Appends the label for a method to a {@link ColoredString}. Considers the M_* flags.
+ * @param method The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'M_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getMethodLabel(IMethod method, long flags, ColoredString result) {
+ try {
+ BindingKey resolvedKey= getFlag(flags, JavaElementLabels.USE_RESOLVED) && method.isResolved() ? new BindingKey(method.getKey()) : null;
+ String resolvedSig= (resolvedKey != null) ? resolvedKey.toSignature() : null;
+
+ // type parameters
+ if (getFlag(flags, JavaElementLabels.M_PRE_TYPE_PARAMETERS)) {
+ if (resolvedKey != null) {
+ if (resolvedKey.isParameterizedMethod()) {
+ String[] typeArgRefs= resolvedKey.getTypeArguments();
+ if (typeArgRefs.length > 0) {
+ getTypeArgumentSignaturesLabel(typeArgRefs, flags, result);
+ result.append(' ');
+ }
+ } else {
+ String[] typeParameterSigs= Signature.getTypeParameters(resolvedSig);
+ if (typeParameterSigs.length > 0) {
+ getTypeParameterSignaturesLabel(typeParameterSigs, flags, result);
+ result.append(' ');
+ }
+ }
+ } else if (method.exists()) {
+ ITypeParameter[] typeParameters= method.getTypeParameters();
+ if (typeParameters.length > 0) {
+ getTypeParametersLabel(typeParameters, flags, result);
+ result.append(' ');
+ }
+ }
+ }
+
+ // return type
+ if (getFlag(flags, JavaElementLabels.M_PRE_RETURNTYPE) && method.exists() && !method.isConstructor()) {
+ String returnTypeSig= resolvedSig != null ? Signature.getReturnType(resolvedSig) : method.getReturnType();
+ getTypeSignatureLabel(returnTypeSig, flags, result);
+ result.append(' ');
+ }
+
+ // qualification
+ if (getFlag(flags, JavaElementLabels.M_FULLY_QUALIFIED)) {
+ getTypeLabel(method.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+
+ result.append(method.getElementName());
+
+ // parameters
+ result.append('(');
+ if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES)) {
+ String[] types= null;
+ int nParams= 0;
+ boolean renderVarargs= false;
+ if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES)) {
+ if (resolvedSig != null) {
+ types= Signature.getParameterTypes(resolvedSig);
+ } else {
+ types= method.getParameterTypes();
+ }
+ nParams= types.length;
+ renderVarargs= method.exists() && Flags.isVarargs(method.getFlags());
+ }
+ String[] names= null;
+ if (getFlag(flags, JavaElementLabels.M_PARAMETER_NAMES) && method.exists()) {
+ names= method.getParameterNames();
+ if (types == null) {
+ nParams= names.length;
+ } else { // types != null
+ if (nParams != names.length) {
+ if (resolvedSig != null && types.length > names.length) {
+ // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=99137
+ nParams= names.length;
+ String[] typesWithoutSyntheticParams= new String[nParams];
+ System.arraycopy(types, types.length - nParams, typesWithoutSyntheticParams, 0, nParams);
+ types= typesWithoutSyntheticParams;
+ } else {
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=101029
+ // JavaPlugin.logErrorMessage("JavaElementLabels: Number of param types(" + nParams + ") != number of names(" + names.length + "): " + method.getElementName()); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+ names= null; // no names rendered
+ }
+ }
+ }
+ }
+
+ for (int i= 0; i < nParams; i++) {
+ if (i > 0) {
+ result.append(JavaElementLabels.COMMA_STRING);
+ }
+ if (types != null) {
+ String paramSig= types[i];
+ if (renderVarargs && (i == nParams - 1)) {
+ int newDim= Signature.getArrayCount(paramSig) - 1;
+ getTypeSignatureLabel(Signature.getElementType(paramSig), flags, result);
+ for (int k= 0; k < newDim; k++) {
+ result.append('[').append(']');
+ }
+ result.append(JavaElementLabels.ELLIPSIS_STRING);
+ } else {
+ getTypeSignatureLabel(paramSig, flags, result);
+ }
+ }
+ if (names != null) {
+ if (types != null) {
+ result.append(' ');
+ }
+ result.append(names[i]);
+ }
+ }
+ } else {
+ if (method.getParameterTypes().length > 0) {
+ result.append(JavaElementLabels.ELLIPSIS_STRING);
+ }
+ }
+ result.append(')');
+
+ if (getFlag(flags, JavaElementLabels.M_EXCEPTIONS)) {
+ String[] types;
+ if (resolvedKey != null) {
+ types= resolvedKey.getThrownExceptions();
+ } else {
+ types= method.exists() ? method.getExceptionTypes() : new String[0];
+ }
+ if (types.length > 0) {
+ result.append(" throws "); //$NON-NLS-1$
+ for (int i= 0; i < types.length; i++) {
+ if (i > 0) {
+ result.append(JavaElementLabels.COMMA_STRING);
+ }
+ getTypeSignatureLabel(types[i], flags, result);
+ }
+ }
+ }
+
+ if (getFlag(flags, JavaElementLabels.M_APP_TYPE_PARAMETERS)) {
+ if (resolvedKey != null) {
+ if (resolvedKey.isParameterizedMethod()) {
+ String[] typeArgRefs= resolvedKey.getTypeArguments();
+ if (typeArgRefs.length > 0) {
+ result.append(' ');
+ getTypeArgumentSignaturesLabel(typeArgRefs, flags, result);
+ }
+ } else {
+ String[] typeParameterSigs= Signature.getTypeParameters(resolvedSig);
+ if (typeParameterSigs.length > 0) {
+ result.append(' ');
+ getTypeParameterSignaturesLabel(typeParameterSigs, flags, result);
+ }
+ }
+ } else if (method.exists()) {
+ ITypeParameter[] typeParameters= method.getTypeParameters();
+ if (typeParameters.length > 0) {
+ result.append(' ');
+ getTypeParametersLabel(typeParameters, flags, result);
+ }
+ }
+ }
+
+ if (getFlag(flags, JavaElementLabels.M_APP_RETURNTYPE) && method.exists() && !method.isConstructor()) {
+ result.append(JavaElementLabels.DECL_STRING);
+ String returnTypeSig= resolvedSig != null ? Signature.getReturnType(resolvedSig) : method.getReturnType();
+ getTypeSignatureLabel(returnTypeSig, flags, result);
+ }
+
+ // category
+ if (getFlag(flags, JavaElementLabels.M_CATEGORY) && method.exists())
+ getCategoryLabel(method, result);
+
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.M_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getTypeLabel(method.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e); // NotExistsException will not reach this point
+ }
+ }
+
+ private static void getCategoryLabel(IMember member, ColoredString result) throws JavaModelException {
+ String[] categories= member.getCategories();
+ if (categories.length > 0) {
+ ColoredString categoriesBuf= new ColoredString();
+ for (int i= 0; i < categories.length; i++) {
+ if (i > 0)
+ categoriesBuf.append(JavaUIMessages.JavaElementLabels_category_separator_string);
+ categoriesBuf.append(categories[i]);
+ }
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(Messages.format(JavaUIMessages.JavaElementLabels_category , categoriesBuf.toString()));
+ }
+ }
+
+ private static void getTypeParametersLabel(ITypeParameter[] typeParameters, long flags, ColoredString result) {
+ if (typeParameters.length > 0) {
+ result.append('<');
+ for (int i = 0; i < typeParameters.length; i++) {
+ if (i > 0) {
+ result.append(JavaElementLabels.COMMA_STRING);
+ }
+ result.append(typeParameters[i].getElementName());
+ }
+ result.append('>');
+ }
+ }
+
+ /**
+ * Appends the label for a field to a {@link ColoredString}. Considers the F_* flags.
+ * @param field The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'F_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getFieldLabel(IField field, long flags, ColoredString result) {
+ try {
+
+ if (getFlag(flags, JavaElementLabels.F_PRE_TYPE_SIGNATURE) && field.exists() && !Flags.isEnum(field.getFlags())) {
+ if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && field.isResolved()) {
+ getTypeSignatureLabel(new BindingKey(field.getKey()).toSignature(), flags, result);
+ } else {
+ getTypeSignatureLabel(field.getTypeSignature(), flags, result);
+ }
+ result.append(' ');
+ }
+
+ // qualification
+ if (getFlag(flags, JavaElementLabels.F_FULLY_QUALIFIED)) {
+ getTypeLabel(field.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ result.append(field.getElementName());
+
+ if (getFlag(flags, JavaElementLabels.F_APP_TYPE_SIGNATURE) && field.exists() && !Flags.isEnum(field.getFlags())) {
+ result.append(JavaElementLabels.DECL_STRING);
+ if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && field.isResolved()) {
+ getTypeSignatureLabel(new BindingKey(field.getKey()).toSignature(), flags, result);
+ } else {
+ getTypeSignatureLabel(field.getTypeSignature(), flags, result);
+ }
+ }
+
+ // category
+ if (getFlag(flags, JavaElementLabels.F_CATEGORY) && field.exists())
+ getCategoryLabel(field, result);
+
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.F_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getTypeLabel(field.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e); // NotExistsException will not reach this point
+ }
+ }
+
+ /**
+ * Appends the label for a local variable to a {@link ColoredString}.
+ * @param localVariable The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'F_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getLocalVariableLabel(ILocalVariable localVariable, long flags, ColoredString result) {
+ if (getFlag(flags, JavaElementLabels.F_PRE_TYPE_SIGNATURE)) {
+ getTypeSignatureLabel(localVariable.getTypeSignature(), flags, result);
+ result.append(' ');
+ }
+
+ if (getFlag(flags, JavaElementLabels.F_FULLY_QUALIFIED)) {
+ getElementLabel(localVariable.getParent(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+
+ result.append(localVariable.getElementName());
+
+ if (getFlag(flags, JavaElementLabels.F_APP_TYPE_SIGNATURE)) {
+ result.append(JavaElementLabels.DECL_STRING);
+ getTypeSignatureLabel(localVariable.getTypeSignature(), flags, result);
+ }
+
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.F_POST_QUALIFIED)) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getElementLabel(localVariable.getParent(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ }
+ }
+
+ /**
+ * Appends the label for a initializer to a {@link ColoredString}. Considers the I_* flags.
+ * @param initializer The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'I_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getInitializerLabel(IInitializer initializer, long flags, ColoredString result) {
+ // qualification
+ if (getFlag(flags, JavaElementLabels.I_FULLY_QUALIFIED)) {
+ getTypeLabel(initializer.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ result.append(JavaUIMessages.JavaElementLabels_initializer);
+
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.I_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getTypeLabel(initializer.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ private static void getTypeSignatureLabel(String typeSig, long flags, ColoredString result) {
+ int sigKind= Signature.getTypeSignatureKind(typeSig);
+ switch (sigKind) {
+ case Signature.BASE_TYPE_SIGNATURE:
+ result.append(Signature.toString(typeSig));
+ break;
+ case Signature.ARRAY_TYPE_SIGNATURE:
+ getTypeSignatureLabel(Signature.getElementType(typeSig), flags, result);
+ for (int dim= Signature.getArrayCount(typeSig); dim > 0; dim--) {
+ result.append('[').append(']');
+ }
+ break;
+ case Signature.CLASS_TYPE_SIGNATURE:
+ String baseType= Signature.toString(Signature.getTypeErasure(typeSig));
+ result.append(Signature.getSimpleName(baseType));
+
+ String[] typeArguments= Signature.getTypeArguments(typeSig);
+ getTypeArgumentSignaturesLabel(typeArguments, flags, result);
+ break;
+ case Signature.TYPE_VARIABLE_SIGNATURE:
+ result.append(Signature.toString(typeSig));
+ break;
+ case Signature.WILDCARD_TYPE_SIGNATURE:
+ char ch= typeSig.charAt(0);
+ if (ch == Signature.C_STAR) { //workaround for bug 85713
+ result.append('?');
+ } else {
+ if (ch == Signature.C_EXTENDS) {
+ result.append("? extends "); //$NON-NLS-1$
+ getTypeSignatureLabel(typeSig.substring(1), flags, result);
+ } else if (ch == Signature.C_SUPER) {
+ result.append("? super "); //$NON-NLS-1$
+ getTypeSignatureLabel(typeSig.substring(1), flags, result);
+ }
+ }
+ break;
+ case Signature.CAPTURE_TYPE_SIGNATURE:
+ getTypeSignatureLabel(typeSig.substring(1), flags, result);
+ break;
+ default:
+ // unknown
+ }
+ }
+
+ private static void getTypeArgumentSignaturesLabel(String[] typeArgsSig, long flags, ColoredString result) {
+ if (typeArgsSig.length > 0) {
+ result.append('<');
+ for (int i = 0; i < typeArgsSig.length; i++) {
+ if (i > 0) {
+ result.append(JavaElementLabels.COMMA_STRING);
+ }
+ getTypeSignatureLabel(typeArgsSig[i], flags, result);
+ }
+ result.append('>');
+ }
+ }
+
+ private static void getTypeParameterSignaturesLabel(String[] typeParamSigs, long flags, ColoredString result) {
+ if (typeParamSigs.length > 0) {
+ result.append('<');
+ for (int i = 0; i < typeParamSigs.length; i++) {
+ if (i > 0) {
+ result.append(JavaElementLabels.COMMA_STRING);
+ }
+ result.append(Signature.getTypeVariable(typeParamSigs[i]));
+ }
+ result.append('>');
+ }
+ }
+
+
+ /**
+ * Appends the label for a type to a {@link ColoredString}. Considers the T_* flags.
+ * @param type The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'T_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getTypeLabel(IType type, long flags, ColoredString result) {
+
+ if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) {
+ IPackageFragment pack= type.getPackageFragment();
+ if (!pack.isDefaultPackage()) {
+ getPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ }
+ if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) {
+ IType declaringType= type.getDeclaringType();
+ if (declaringType != null) {
+ getTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ int parentType= type.getParent().getElementType();
+ if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) { // anonymous or local
+ getElementLabel(type.getParent(), 0, result);
+ result.append('.');
+ }
+ }
+
+ String typeName= type.getElementName();
+ if (typeName.length() == 0) { // anonymous
+ try {
+ if (type.getParent() instanceof IField && type.isEnum()) {
+ typeName= '{' + JavaElementLabels.ELLIPSIS_STRING + '}';
+ } else {
+ String supertypeName;
+ String[] superInterfaceNames= type.getSuperInterfaceNames();
+ if (superInterfaceNames.length > 0) {
+ supertypeName= Signature.getSimpleName(superInterfaceNames[0]);
+ } else {
+ supertypeName= Signature.getSimpleName(type.getSuperclassName());
+ }
+ typeName= Messages.format(JavaUIMessages.JavaElementLabels_anonym_type , supertypeName);
+ }
+ } catch (JavaModelException e) {
+ //ignore
+ typeName= JavaUIMessages.JavaElementLabels_anonym;
+ }
+ }
+ result.append(typeName);
+ if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) {
+ if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) {
+ BindingKey key= new BindingKey(type.getKey());
+ if (key.isParameterizedType()) {
+ String[] typeArguments= key.getTypeArguments();
+ getTypeArgumentSignaturesLabel(typeArguments, flags, result);
+ } else {
+ String[] typeParameters= Signature.getTypeParameters(key.toSignature());
+ getTypeParameterSignaturesLabel(typeParameters, flags, result);
+ }
+ } else if (type.exists()) {
+ try {
+ getTypeParametersLabel(type.getTypeParameters(), flags, result);
+ } catch (JavaModelException e) {
+ // ignore
+ }
+ }
+ }
+
+ // category
+ if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) {
+ try {
+ getCategoryLabel(type, result);
+ } catch (JavaModelException e) {
+ // ignore
+ }
+ }
+
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ IType declaringType= type.getDeclaringType();
+ if (declaringType != null) {
+ getTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS), result);
+ int parentType= type.getParent().getElementType();
+ if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) { // anonymous or local
+ result.append('.');
+ getElementLabel(type.getParent(), 0, result);
+ }
+ } else {
+ getPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS, result);
+ }
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Appends the label for a import container, import or package declaration to a {@link ColoredString}. Considers the D_* flags.
+ * @param declaration The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'D_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getDeclarationLabel(IJavaElement declaration, long flags, ColoredString result) {
+ if (getFlag(flags, JavaElementLabels.D_QUALIFIED)) {
+ IJavaElement openable= (IJavaElement) declaration.getOpenable();
+ if (openable != null) {
+ result.append(getElementLabel(openable, JavaElementLabels.CF_QUALIFIED | JavaElementLabels.CU_QUALIFIED | (flags & QUALIFIER_FLAGS)));
+ result.append('/');
+ }
+ }
+ if (declaration.getElementType() == IJavaElement.IMPORT_CONTAINER) {
+ result.append(JavaUIMessages.JavaElementLabels_import_container);
+ } else {
+ result.append(declaration.getElementName());
+ }
+ // post qualification
+ if (getFlag(flags, JavaElementLabels.D_POST_QUALIFIED)) {
+ int offset= result.length();
+ IJavaElement openable= (IJavaElement) declaration.getOpenable();
+ if (openable != null) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(getElementLabel(openable, JavaElementLabels.CF_QUALIFIED | JavaElementLabels.CU_QUALIFIED | (flags & QUALIFIER_FLAGS)));
+ }
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Appends the label for a class file to a {@link ColoredString}. Considers the CF_* flags.
+ * @param classFile The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'CF_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getClassFileLabel(IClassFile classFile, long flags, ColoredString result) {
+ if (getFlag(flags, JavaElementLabels.CF_QUALIFIED)) {
+ IPackageFragment pack= (IPackageFragment) classFile.getParent();
+ if (!pack.isDefaultPackage()) {
+ getPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ }
+ result.append(classFile.getElementName());
+ if (getFlag(flags, COLORIZE) && FILE_SUFFIX_COLOR != 0) {
+ int extLen= 6;
+ result.colorize(result.length() - extLen, extLen, FILE_SUFFIX_COLOR, 0);
+ }
+
+ if (getFlag(flags, JavaElementLabels.CF_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getPackageFragmentLabel((IPackageFragment) classFile.getParent(), flags & QUALIFIER_FLAGS, result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Appends the label for a compilation unit to a {@link ColoredString}. Considers the CU_* flags.
+ * @param cu The element to render.
+ * @param flags The rendering flags. Flags with names starting with 'CU_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getCompilationUnitLabel(ICompilationUnit cu, long flags, ColoredString result) {
+ if (getFlag(flags, JavaElementLabels.CU_QUALIFIED)) {
+ IPackageFragment pack= (IPackageFragment) cu.getParent();
+ if (!pack.isDefaultPackage()) {
+ getPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS), result);
+ result.append('.');
+ }
+ }
+ result.append(cu.getElementName());
+ if (getFlag(flags, COLORIZE) && FILE_SUFFIX_COLOR != 0) {
+ int extLen= cu.getPath().getFileExtension().length();
+ result.colorize(result.length() - extLen, extLen, FILE_SUFFIX_COLOR, 0);
+ }
+
+ if (getFlag(flags, JavaElementLabels.CU_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getPackageFragmentLabel((IPackageFragment) cu.getParent(), flags & QUALIFIER_FLAGS, result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Appends the label for a package fragment to a {@link ColoredString}. Considers the P_* flags.
+ * @param pack The element to render.
+ * @param flags The rendering flags. Flags with names starting with P_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getPackageFragmentLabel(IPackageFragment pack, long flags, ColoredString result) {
+ if (getFlag(flags, JavaElementLabels.P_QUALIFIED)) {
+ getPackageFragmentRootLabel((IPackageFragmentRoot) pack.getParent(), JavaElementLabels.ROOT_QUALIFIED, result);
+ result.append('/');
+ }
+ if (pack.isDefaultPackage()) {
+ result.append(JavaElementLabels.DEFAULT_PACKAGE);
+ } else if (getFlag(flags, JavaElementLabels.P_COMPRESSED)) {
+ StringBuffer buf= new StringBuffer();
+ JavaElementLabels.getPackageFragmentLabel(pack, JavaElementLabels.P_COMPRESSED, buf);
+ result.append(buf.toString());
+ } else {
+ result.append(pack.getElementName());
+ }
+ if (getFlag(flags, JavaElementLabels.P_POST_QUALIFIED)) {
+ int offset= result.length();
+ result.append(JavaElementLabels.CONCAT_STRING);
+ getPackageFragmentRootLabel((IPackageFragmentRoot) pack.getParent(), JavaElementLabels.ROOT_QUALIFIED, result);
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Appends the label for a package fragment root to a {@link ColoredString}. Considers the ROOT_* flags.
+ * @param root The element to render.
+ * @param flags The rendering flags. Flags with names starting with ROOT_' are considered.
+ * @param result The buffer to append the resulting label to.
+ */
+ public static void getPackageFragmentRootLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ if (root.isArchive())
+ getArchiveLabel(root, flags, result);
+ else
+ getFolderLabel(root, flags, result);
+ }
+
+ private static void getArchiveLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ // Handle variables different
+ if (getFlag(flags, JavaElementLabels.ROOT_VARIABLE) && getVariableLabel(root, flags, result))
+ return;
+ boolean external= root.isExternal();
+ if (external)
+ getExternalArchiveLabel(root, flags, result);
+ else
+ getInternalArchiveLabel(root, flags, result);
+ }
+
+ private static boolean getVariableLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ try {
+ IClasspathEntry rawEntry= root.getRawClasspathEntry();
+ if (rawEntry != null && rawEntry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
+ IPath path= rawEntry.getPath().makeRelative();
+ int offset= result.length();
+ if (getFlag(flags, JavaElementLabels.REFERENCED_ROOT_POST_QUALIFIED)) {
+ int segements= path.segmentCount();
+ if (segements > 0) {
+ result.append(path.segment(segements - 1));
+ if (segements > 1) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(path.removeLastSegments(1).toOSString());
+ }
+ } else {
+ result.append(path.toString());
+ }
+ } else {
+ result.append(path.toString());
+ }
+ result.append(JavaElementLabels.CONCAT_STRING);
+ if (root.isExternal())
+ result.append(root.getPath().toOSString());
+ else
+ result.append(root.getPath().makeRelative().toString());
+
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ return true;
+ }
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e); // problems with class path
+ }
+ return false;
+ }
+
+ private static void getExternalArchiveLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ IPath path= root.getPath();
+ if (getFlag(flags, JavaElementLabels.REFERENCED_ROOT_POST_QUALIFIED)) {
+ int segements= path.segmentCount();
+ if (segements > 0) {
+ result.append(path.segment(segements - 1));
+ int offset= result.length();
+ if (segements > 1 || path.getDevice() != null) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(path.removeLastSegments(1).toOSString());
+ }
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ } else {
+ result.append(path.toOSString());
+ }
+ } else {
+ result.append(path.toOSString());
+ }
+ }
+
+ private static void getInternalArchiveLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ IResource resource= root.getResource();
+ boolean rootQualified= getFlag(flags, JavaElementLabels.ROOT_QUALIFIED);
+ boolean referencedQualified= getFlag(flags, JavaElementLabels.REFERENCED_ROOT_POST_QUALIFIED) && isReferenced(root);
+ if (rootQualified) {
+ result.append(root.getPath().makeRelative().toString());
+ } else {
+ result.append(root.getElementName());
+ int offset= result.length();
+ if (referencedQualified) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(resource.getParent().getFullPath().makeRelative().toString());
+ } else if (getFlag(flags, JavaElementLabels.ROOT_POST_QUALIFIED)) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(root.getParent().getPath().makeRelative().toString());
+ } else {
+ return;
+ }
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ private static void getFolderLabel(IPackageFragmentRoot root, long flags, ColoredString result) {
+ IResource resource= root.getResource();
+ boolean rootQualified= getFlag(flags, JavaElementLabels.ROOT_QUALIFIED);
+ boolean referencedQualified= getFlag(flags, JavaElementLabels.REFERENCED_ROOT_POST_QUALIFIED) && isReferenced(root);
+ if (rootQualified) {
+ result.append(root.getPath().makeRelative().toString());
+ } else {
+ if (resource != null) {
+ IPath projectRelativePath= resource.getProjectRelativePath();
+ if (projectRelativePath.segmentCount() == 0) {
+ result.append(resource.getName());
+ referencedQualified= false;
+ } else {
+ result.append(projectRelativePath.toString());
+ }
+ } else
+ result.append(root.getElementName());
+ int offset= result.length();
+ if (referencedQualified) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(resource.getProject().getName());
+ } else if (getFlag(flags, JavaElementLabels.ROOT_POST_QUALIFIED)) {
+ result.append(JavaElementLabels.CONCAT_STRING);
+ result.append(root.getParent().getElementName());
+ } else {
+ return;
+ }
+ if (getFlag(flags, COLORIZE)) {
+ result.colorize(offset, result.length() - offset, QUALIFIER_COLOR, 0);
+ }
+ }
+ }
+
+ /**
+ * Returns true
if the given package fragment root is
+ * referenced. This means it is own by a different project but is referenced
+ * by the root's parent. Returns false
if the given root
+ * doesn't have an underlying resource.
+ *
+ * @since 3.2
+ */
+ private static boolean isReferenced(IPackageFragmentRoot root) {
+ IResource resource= root.getResource();
+ if (resource != null) {
+ IProject jarProject= resource.getProject();
+ IProject container= root.getJavaProject().getProject();
+ return !container.equals(jarProject);
+ }
+ return false;
+ }
+
+ /**
+ * Returns the label of a classpath container
+ * @param containerPath The path of the container.
+ * @param project The project the container is resolved in.
+ * @return Returns the label of the classpath container
+ * @throws JavaModelException Thrown when the resolving of the container failed.
+ */
+ public static String getContainerEntryLabel(IPath containerPath, IJavaProject project) throws JavaModelException {
+ IClasspathContainer container= JavaCore.getClasspathContainer(containerPath, project);
+ if (container != null) {
+ return container.getDescription();
+ }
+ ClasspathContainerInitializer initializer= JavaCore.getClasspathContainerInitializer(containerPath.segment(0));
+ if (initializer != null) {
+ return initializer.getDescription(containerPath, project);
+ }
+ return containerPath.toString();
+ }
+
+ public static ColoredString decorateColoredString(ColoredString string, String decorated, int color) {
+ String label= string.getString();
+ if (!decorated.startsWith(label)) {
+ return new ColoredString(decorated, 0, 0); // the decorator did something wild
+ }
+ if (decorated.length() > label.length()) { // decorator appended something
+ return string.append(decorated.substring(label.length()), color);
+ }
+ return string; // no change
+ }
+
+}
#P org.eclipse.jdt.junit
Index: src/org/eclipse/jdt/internal/junit/ui/TestViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java,v
retrieving revision 1.15
diff -u -r1.15 TestViewer.java
--- src/org/eclipse/jdt/internal/junit/ui/TestViewer.java 13 Mar 2007 10:37:08 -0000 1.15
+++ src/org/eclipse/jdt/internal/junit/ui/TestViewer.java 14 Mar 2007 14:25:44 -0000
@@ -57,6 +57,7 @@
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.viewsupport.OwnerDrawSupport;
import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator;
import org.eclipse.jdt.internal.junit.model.TestCaseElement;
@@ -173,6 +174,7 @@
fViewerbook= new PageBook(parent, SWT.NULL);
fTreeViewer= new TreeViewer(fViewerbook, SWT.V_SCROLL | SWT.SINGLE);
+ OwnerDrawSupport.install(fTreeViewer);
fTreeViewer.setUseHashlookup(true);
fTreeContentProvider= new TestSessionTreeContentProvider();
fTreeViewer.setContentProvider(fTreeContentProvider);
@@ -180,6 +182,7 @@
fTreeViewer.setLabelProvider(fTreeLabelProvider);
fTableViewer= new TableViewer(fViewerbook, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
+ OwnerDrawSupport.install(fTableViewer);
fTableViewer.setUseHashlookup(true);
fTableContentProvider= new TestSessionTableContentProvider();
fTableViewer.setContentProvider(fTableContentProvider);
Index: src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java,v
retrieving revision 1.9
diff -u -r1.9 TestSessionLabelProvider.java
--- src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java 30 May 2006 14:48:26 -0000 1.9
+++ src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java 14 Mar 2007 14:25:44 -0000
@@ -15,14 +15,21 @@
import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredJavaElementLabels;
+import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
+import org.eclipse.jdt.internal.ui.viewsupport.IRichLabelProvider;
+
+import org.eclipse.jdt.junit.model.ITestCaseElement;
+import org.eclipse.jdt.junit.model.ITestElement;
+import org.eclipse.jdt.junit.model.ITestRunSession;
+import org.eclipse.jdt.junit.model.ITestSuiteElement;
+
import org.eclipse.jdt.internal.junit.Messages;
import org.eclipse.jdt.internal.junit.model.TestCaseElement;
-import org.eclipse.jdt.internal.junit.model.TestElement;
-import org.eclipse.jdt.internal.junit.model.TestRoot;
import org.eclipse.jdt.internal.junit.model.TestSuiteElement;
import org.eclipse.jdt.internal.junit.model.TestElement.Status;
-public class TestSessionLabelProvider extends LabelProvider {
+public class TestSessionLabelProvider extends LabelProvider implements IRichLabelProvider {
private final TestRunnerViewPart fTestRunnerPart;
private final int fLayoutMode;
@@ -31,37 +38,62 @@
fTestRunnerPart= testRunnerPart;
fLayoutMode= layoutMode;
}
-
- public String getText(Object element) {
- if (element instanceof TestCaseElement) {
- TestCaseElement testCaseElement= (TestCaseElement) element;
- String testMethodName= testCaseElement.getTestMethodName();
- if (fLayoutMode == TestRunnerViewPart.LAYOUT_HIERARCHICAL) {
- return getElementLabel(testMethodName, testCaseElement);
- } else {
- String className= testCaseElement.getClassName();
- return Messages.format(JUnitMessages.TestSessionLabelProvider_testMethodName_className, new Object[] { testMethodName, className });
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.ui.viewsupport.IRichLabelProvider#getRichTextLabel(java.lang.Object)
+ */
+ public ColoredString getRichTextLabel(Object element) {
+ String label= getSimpleLabel(element);
+ if (label == null) {
+ return new ColoredString(element.toString());
+ }
+ ColoredString text= new ColoredString(label);
+ if (fLayoutMode == TestRunnerViewPart.LAYOUT_HIERARCHICAL) {
+ if (((ITestElement) element).getParentContainer() instanceof ITestRunSession) {
+ String testKindDisplayName= fTestRunnerPart.getTestKindDisplayName();
+ if (testKindDisplayName != null) {
+ String decorated= Messages.format(JUnitMessages.TestSessionLabelProvider_testName_JUnitVersion, new Object[] { label, testKindDisplayName });
+ return ColoredJavaElementLabels.decorateColoredString(text, decorated, ColoredJavaElementLabels.QUALIFIER_COLOR);
+ }
}
-
- } else if (element instanceof TestElement) {
- TestElement testElement= (TestElement) element;
- String testName= testElement.getTestName();
- return getElementLabel(testName, testElement);
} else {
- throw new IllegalArgumentException(String.valueOf(element));
+ if (element instanceof ITestCaseElement) {
+ String className= ((ITestCaseElement) element).getTestClassName();
+ String decorated= Messages.format(JUnitMessages.TestSessionLabelProvider_testMethodName_className, new Object[] { label, className });
+ return ColoredJavaElementLabels.decorateColoredString(text, decorated, ColoredJavaElementLabels.QUALIFIER_COLOR);
+ }
+ }
+ return text;
+ }
+
+ private String getSimpleLabel(Object element) {
+ if (element instanceof ITestCaseElement) {
+ return ((ITestCaseElement) element).getTestMethodName();
+ } else if (element instanceof ITestSuiteElement) {
+ return ((ITestSuiteElement) element).getSuiteTypeName();
}
+ return null;
}
- private String getElementLabel(String name, TestElement testElement) {
- if (fLayoutMode == TestRunnerViewPart.LAYOUT_HIERARCHICAL && testElement.getParent() instanceof TestRoot) {
- String testKindDisplayName= fTestRunnerPart.getTestKindDisplayName();
- if (testKindDisplayName == null)
- return name;
- else
- return Messages.format(JUnitMessages.TestSessionLabelProvider_testName_JUnitVersion, new Object[] { name, testKindDisplayName });
- } else
- return name;
-
+ public String getText(Object element) {
+ String label= getSimpleLabel(element);
+ if (label == null) {
+ return element.toString();
+ }
+ if (fLayoutMode == TestRunnerViewPart.LAYOUT_HIERARCHICAL) {
+ if (((ITestElement) element).getParentContainer() instanceof ITestRunSession) {
+ String testKindDisplayName= fTestRunnerPart.getTestKindDisplayName();
+ if (testKindDisplayName != null) {
+ return Messages.format(JUnitMessages.TestSessionLabelProvider_testName_JUnitVersion, new Object[] { label, testKindDisplayName });
+ }
+ }
+ } else {
+ if (element instanceof ITestCaseElement) {
+ String className= ((ITestCaseElement) element).getTestClassName();
+ return Messages.format(JUnitMessages.TestSessionLabelProvider_testMethodName_className, new Object[] { label, className });
+ }
+ }
+ return label;
}
public Image getImage(Object element) {
@@ -103,4 +135,6 @@
throw new IllegalArgumentException(String.valueOf(element));
}
}
+
+
}