KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > typehierarchy > MethodsLabelProvider


1 /*******************************************************************************
2  * Copyright (c) 2000, 2007 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.ui.typehierarchy;
12
13 import org.eclipse.swt.graphics.Color;
14
15 import org.eclipse.jface.resource.JFaceResources;
16 import org.eclipse.jface.util.IPropertyChangeListener;
17 import org.eclipse.jface.util.PropertyChangeEvent;
18 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
19
20 import org.eclipse.jdt.core.IJavaElement;
21 import org.eclipse.jdt.core.IMember;
22 import org.eclipse.jdt.core.IMethod;
23 import org.eclipse.jdt.core.IType;
24 import org.eclipse.jdt.core.ITypeHierarchy;
25 import org.eclipse.jdt.core.JavaModelException;
26
27 import org.eclipse.jdt.internal.corext.util.MethodOverrideTester;
28
29 import org.eclipse.jdt.ui.JavaElementLabels;
30
31 import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
32 import org.eclipse.jdt.internal.ui.viewsupport.ColoredString;
33 import org.eclipse.jdt.internal.ui.viewsupport.ColoredViewersManager;
34
35 /**
36  * Label provider for the hierarchy method viewers.
37  */

38 public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
39     
40     private boolean fShowDefiningType;
41     private TypeHierarchyLifeCycle fHierarchy;
42     private MethodsViewer fMethodsViewer;
43     private IPropertyChangeListener fColorRegistryListener;
44
45     public MethodsLabelProvider(TypeHierarchyLifeCycle lifeCycle, MethodsViewer methodsViewer) {
46         super(DEFAULT_TEXTFLAGS, DEFAULT_IMAGEFLAGS);
47         fHierarchy= lifeCycle;
48         fShowDefiningType= false;
49         fMethodsViewer= methodsViewer;
50         fColorRegistryListener= new IPropertyChangeListener() {
51             public void propertyChange(PropertyChangeEvent event) {
52                 if (event.getProperty().equals(ColoredViewersManager.INHERITED_COLOR_NAME)) {
53                     fireLabelProviderChanged(new LabelProviderChangedEvent(MethodsLabelProvider.this, null));
54                 }
55             }
56         };
57         JFaceResources.getColorRegistry().addListener(fColorRegistryListener);
58     }
59     
60     public void setShowDefiningType(boolean showDefiningType) {
61         fShowDefiningType= showDefiningType;
62     }
63     
64     public boolean isShowDefiningType() {
65         return fShowDefiningType;
66     }
67             
68
69     private IType getDefiningType(Object JavaDoc element) throws JavaModelException {
70         int kind= ((IJavaElement) element).getElementType();
71     
72         if (kind != IJavaElement.METHOD && kind != IJavaElement.FIELD && kind != IJavaElement.INITIALIZER) {
73             return null;
74         }
75         IType declaringType= ((IMember) element).getDeclaringType();
76         if (kind != IJavaElement.METHOD) {
77             return declaringType;
78         }
79         ITypeHierarchy hierarchy= fHierarchy.getHierarchy();
80         if (hierarchy == null) {
81             return declaringType;
82         }
83         IMethod method= (IMethod) element;
84         MethodOverrideTester tester= new MethodOverrideTester(declaringType, hierarchy);
85         IMethod res= tester.findDeclaringMethod(method, true);
86         if (res == null || method.equals(res)) {
87             return declaringType;
88         }
89         return res.getDeclaringType();
90     }
91
92     /* (non-Javadoc)
93      * @see ILabelProvider#getText
94      */

95     public String JavaDoc getText(Object JavaDoc element) {
96         String JavaDoc text= super.getText(element);
97         String JavaDoc qualifier= getQualifier(element);
98         if (qualifier != null) {
99             return qualifier + text;
100         }
101         return text;
102     }
103     
104     /* (non-Javadoc)
105      * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
106      */

107     public ColoredString getRichTextLabel(Object JavaDoc element) {
108         ColoredString text= super.getRichTextLabel(element);
109         String JavaDoc qualifier= getQualifier(element);
110         if (qualifier != null) {
111             return new ColoredString(qualifier).append(text);
112         }
113         return text;
114         
115     }
116     
117     private String JavaDoc getQualifier(Object JavaDoc element) {
118         if (fShowDefiningType) {
119             try {
120                 IType type= getDefiningType(element);
121                 if (type != null) {
122                     return super.getText(type) + JavaElementLabels.CONCAT_STRING;
123                 }
124             } catch (JavaModelException e) {
125             }
126         }
127         return null;
128     }
129     
130     
131     /* (non-Javadoc)
132      * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
133      */

134     public Color getForeground(Object JavaDoc element) {
135         if (fMethodsViewer.isShowInheritedMethods() && element instanceof IMethod) {
136             IMethod curr= (IMethod) element;
137             IMember declaringType= curr.getDeclaringType();
138             
139             if (!declaringType.equals(fMethodsViewer.getInput())) {
140                 return JFaceResources.getColorRegistry().get(ColoredViewersManager.INHERITED_COLOR_NAME);
141             }
142         }
143         return null;
144     }
145     
146     public void dispose() {
147         JFaceResources.getColorRegistry().removeListener(fColorRegistryListener);
148         fColorRegistryListener= null;
149         super.dispose();
150     }
151     
152 }
153
Popular Tags