Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 1814 Details for
Bug 22118
[Decorators] Decorators for IResource ignores adaptable flag
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Suggested changes to DecoratorManager
patch_org.eclipse.ui.internal.DecoratorManager.java.diff (text/plain), 6.24 KB, created by
Gunnar Wagenknecht
on 2002-08-08 12:46:20 EDT
(
hide
)
Description:
Suggested changes to DecoratorManager
Filename:
MIME Type:
Creator:
Gunnar Wagenknecht
Created:
2002-08-08 12:46:20 EDT
Size:
6.24 KB
patch
obsolete
>Index: DecoratorManager.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui/Eclipse UI/org/eclipse/ui/internal/DecoratorManager.java,v >retrieving revision 1.35 >diff -u -r1.35 DecoratorManager.java >--- DecoratorManager.java 11 Jun 2002 15:35:15 -0000 1.35 >+++ DecoratorManager.java 8 Aug 2002 16:45:11 -0000 >@@ -10,8 +10,6 @@ > import org.eclipse.core.runtime.IAdaptable; > import org.eclipse.core.runtime.Platform; > import org.eclipse.jface.viewers.*; >-import org.eclipse.jface.viewers.ILabelDecorator; >-import org.eclipse.jface.viewers.LabelProviderChangedEvent; > import org.eclipse.swt.graphics.Image; > import org.eclipse.ui.IContributorResourceAdapter; > import org.eclipse.ui.IDecoratorManager; >@@ -126,8 +124,23 @@ > if (checkAdapted) { > //Get any adaptions to IResource > Object adapted = getResourceAdapter(element); >- if (adapted != null) >- result = decorateText(result, adapted, false); >+ if (adapted != null) { >+ >+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=22118 >+ // >+ // don't do it recursive, will decorate twice sometimes >+ //result = decorateText(result, adapted, false); >+ >+ List alreadyAppliedDecorators = Arrays.asList(decorators); >+ DecoratorDefinition[] resourceDecorators = getDecoratorsFor(adapted); >+ for (int i = 0; i < resourceDecorators.length; i++) { >+ if( !alreadyAppliedDecorators.contains(resourceDecorators[i]) ) { >+ String newResult = resourceDecorators[i].decorateText(result, adapted); >+ if (newResult != null) >+ result = newResult; >+ } >+ } >+ } > } > > return result; >@@ -162,8 +175,23 @@ > if (checkAdapted) { > //Get any adaptions to IResource > Object adapted = getResourceAdapter(element); >- if (adapted != null) >- result = decorateImage(result, adapted, false); >+ if (adapted != null) { >+ >+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=22118 >+ // >+ // don't do it recursive, will decorate twice sometimes >+ //result = decorateImage(result, adapted, false); >+ >+ List alreadyAppliedDecorators = Arrays.asList(decorators); >+ DecoratorDefinition[] resourceDecorators = getDecoratorsFor(adapted); >+ for (int i = 0; i < resourceDecorators.length; i++) { >+ if( !alreadyAppliedDecorators.contains(resourceDecorators[i]) ) { >+ Image newResult = resourceDecorators[i].decorateImage(result, adapted); >+ if (newResult != null) >+ result = newResult; >+ } >+ } >+ } > } > > return result; >@@ -205,14 +233,26 @@ > > Class elementClass = element.getClass(); > String className = elementClass.getName(); >- DecoratorDefinition[] decoratorArray = >+ >+ DecoratorDefinition[] decoratorArray = > (DecoratorDefinition[]) cachedDecorators.get(className); > if (decoratorArray != null) { >+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=22118 >+ // >+ // adaptable decorators are element dependend >+ Set adaptableDecorators = new HashSet(); >+ findDecorators((IAdaptable)element, enabledDefinitions(), adaptableDecorators); >+ if( !adaptableDecorators.isEmpty() ) >+ { >+ adaptableDecorators.addAll(Arrays.asList(decoratorArray)); >+ decoratorArray = new DecoratorDefinition[adaptableDecorators.size()]; >+ adaptableDecorators.toArray(decoratorArray); >+ } > return decoratorArray; > } > > List allClasses = computeClassOrder(elementClass); >- ArrayList decorators = new ArrayList(); >+ Set decorators = new HashSet(); > DecoratorDefinition[] enabledDefinitions = enabledDefinitions(); > > findDecorators(allClasses, enabledDefinitions, decorators); >@@ -221,6 +261,12 @@ > computeInterfaceOrder(allClasses), > enabledDefinitions, > decorators); >+ >+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=22118 >+ // >+ // dont forget to check for decorators also decorating adaptables >+ if( element instanceof IAdaptable ) >+ findDecorators((IAdaptable)element, enabledDefinitions, decorators); > > decoratorArray = new DecoratorDefinition[decorators.size()]; > decorators.toArray(decoratorArray); >@@ -235,7 +281,7 @@ > private void findDecorators( > Collection classList, > DecoratorDefinition[] enabledDefinitions, >- ArrayList result) { >+ Collection result) { > > Iterator classes = classList.iterator(); > while (classes.hasNext()) { >@@ -247,6 +293,38 @@ > } > > } >+ >+ /** >+ * Find defined decorators that have a type that the specified adaptable object >+ * has an adapter for. >+ * <b>NOTE:</b> The result can't becached with this implementation. See source for details. >+ */ >+ private void findDecorators( >+ IAdaptable adaptableObject, >+ DecoratorDefinition[] enabledDefinitions, >+ Collection result) { >+ >+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=22118 >+ >+ for (int i = 0; i < enabledDefinitions.length; i++) { >+ if( enabledDefinitions[i].isAdaptable() ) { >+ try >+ { >+ Class objectClass = getClass().forName(enabledDefinitions[i].getObjectClass()); >+ if (null != adaptableObject.getAdapter(objectClass) ) { >+ >+ // NOTE: we are checking the object for an adapter >+ // it may be possible that not all objects of the same type have an adapter >+ // for the same type >+ // --> DO NOT cache result for types!!! >+ result.add(enabledDefinitions[i]); >+ } >+ } >+ catch (ClassNotFoundException e) >+ { /** @todo implement error handling */ } >+ } >+ } >+ } > > /** > * Return whether or not the decorator registered for element
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 22118
: 1814 |
1818