1 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 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 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 95 public String getText(Object element) { 96 String text= super.getText(element); 97 String qualifier= getQualifier(element); 98 if (qualifier != null) { 99 return qualifier + text; 100 } 101 return text; 102 } 103 104 107 public ColoredString getRichTextLabel(Object element) { 108 ColoredString text= super.getRichTextLabel(element); 109 String qualifier= getQualifier(element); 110 if (qualifier != null) { 111 return new ColoredString(qualifier).append(text); 112 } 113 return text; 114 115 } 116 117 private String getQualifier(Object 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 134 public Color getForeground(Object 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 |