Bug 442693 - Added decorators to "Advanced Information" when dumping UI tree

Signed-off-by: Mixail Bobylev <mixail.bobylev@xored.com>
diff --git a/runtime/org.eclipse.rcptt.expandbar.runtime/src/org/eclipse/rcptt/expandbar/runtime/internal/ExpandBarUIProcessor.java b/runtime/org.eclipse.rcptt.expandbar.runtime/src/org/eclipse/rcptt/expandbar/runtime/internal/ExpandBarUIProcessor.java
index be14821..1059b68 100644
--- a/runtime/org.eclipse.rcptt.expandbar.runtime/src/org/eclipse/rcptt/expandbar/runtime/internal/ExpandBarUIProcessor.java
+++ b/runtime/org.eclipse.rcptt.expandbar.runtime/src/org/eclipse/rcptt/expandbar/runtime/internal/ExpandBarUIProcessor.java
@@ -12,13 +12,10 @@
 
 import java.util.Arrays;
 
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ExpandBar;
-import org.eclipse.swt.widgets.ExpandItem;
-
 import org.eclipse.rcptt.expandbar.ExpandBarConstants;
 import org.eclipse.rcptt.expandbar.widgets.WidgetsFactory;
 import org.eclipse.rcptt.tesla.core.context.ContextManagement.Context;
+import org.eclipse.rcptt.tesla.core.info.AdvancedInformation;
 import org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot;
 import org.eclipse.rcptt.tesla.core.protocol.Collapse;
 import org.eclipse.rcptt.tesla.core.protocol.Expand;
@@ -35,6 +32,9 @@
 import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIElement;
 import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer;
 import org.eclipse.rcptt.tesla.internal.ui.processors.SWTUIProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ExpandBar;
+import org.eclipse.swt.widgets.ExpandItem;
 
 public class ExpandBarUIProcessor extends SWTUIProcessor implements ISWTModelMapperExtension {
 	private final ExpandBarPlayerExtension ext = new ExpandBarPlayerExtension();
@@ -44,6 +44,11 @@
 	}
 
 	@Override
+	public void collectInformation(AdvancedInformation information, Command lastCommand) {
+		// No information
+	}
+
+	@Override
 	public void terminate() {
 		SWTUIPlayer.removeExtension(ext);
 		super.terminate();
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/SWTUIElement.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/SWTUIElement.java
index c7f5aac..3bdaeff 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/SWTUIElement.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/SWTUIElement.java
@@ -10,7 +10,21 @@
  *******************************************************************************/
 package org.eclipse.rcptt.tesla.internal.ui.player;
 
+import java.util.ArrayList;
+
+import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.rcptt.logging.IQ7ActivityLogs;
+import org.eclipse.rcptt.logging.Q7LoggingManager;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
+import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
+import org.eclipse.rcptt.tesla.core.protocol.GenericElementKind;
+import org.eclipse.rcptt.tesla.core.protocol.UIColor;
+import org.eclipse.rcptt.tesla.internal.ui.IBasicMappingNode;
+import org.eclipse.rcptt.tesla.internal.ui.player.viewers.Viewers;
+import org.eclipse.rcptt.tesla.jface.ControlDecoratorRecordingHolder;
+import org.eclipse.rcptt.tesla.swt.TeslaSWTMessages;
+import org.eclipse.rcptt.util.swt.TableTreeUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
@@ -23,17 +37,6 @@
 import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.PlatformUI;
 
-import org.eclipse.rcptt.logging.IQ7ActivityLogs;
-import org.eclipse.rcptt.logging.Q7LoggingManager;
-import org.eclipse.rcptt.util.swt.TableTreeUtil;
-import org.eclipse.rcptt.tesla.core.TeslaFeatures;
-import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
-import org.eclipse.rcptt.tesla.core.protocol.GenericElementKind;
-import org.eclipse.rcptt.tesla.core.protocol.UIColor;
-import org.eclipse.rcptt.tesla.internal.ui.IBasicMappingNode;
-import org.eclipse.rcptt.tesla.internal.ui.player.viewers.Viewers;
-import org.eclipse.rcptt.tesla.swt.TeslaSWTMessages;
-
 /**
  * Instances of this class are used mainly as convenience wraps for SWT widgets
  * (and not only widgets, but UI elements of other kinds as well) to do some
@@ -289,4 +292,15 @@
 		}
 		return new Rectangle(0, 0, 0, 0);
 	}
+
+	public java.util.List<ControlDecoration> getDecorators() {
+		java.util.List<ControlDecoration> result = new ArrayList<ControlDecoration>();
+
+		if (widget instanceof Control) {
+			result = ControlDecoratorRecordingHolder.getDecorators((Control) widget);
+		}
+
+		return result;
+	}
+
 }
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/processors/SWTUIProcessor.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/processors/SWTUIProcessor.java
index 87c0bb9..e9b1c94 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/processors/SWTUIProcessor.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/processors/SWTUIProcessor.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.rcptt.tesla.internal.ui.processors;
 
-import static org.eclipse.rcptt.util.swt.Bounds.centerAbs;
-import static org.eclipse.rcptt.util.swt.Bounds.centerRel;
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerTextUtils.replaceMultilines;
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerTextUtils.safeMatches;
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerTextUtils.unifyMultilines;
@@ -22,6 +20,8 @@
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerWidgetUtils.isDisabled;
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerWrapUtils.unwrap;
 import static org.eclipse.rcptt.tesla.internal.ui.player.PlayerWrapUtils.unwrapWidget;
+import static org.eclipse.rcptt.util.swt.Bounds.centerAbs;
+import static org.eclipse.rcptt.util.swt.Bounds.centerRel;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -49,49 +49,11 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ColumnViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Item;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Slider;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.handlers.IHandlerService;
-
-import org.eclipse.rcptt.util.StringUtils;
-import org.eclipse.rcptt.util.swt.StringLines;
-import org.eclipse.rcptt.util.swt.TableTreeUtil;
 import org.eclipse.rcptt.tesla.core.Q7WaitUtils;
 import org.eclipse.rcptt.tesla.core.TeslaFeatures;
 import org.eclipse.rcptt.tesla.core.context.ContextManagement.Context;
@@ -214,13 +176,51 @@
 import org.eclipse.rcptt.tesla.swt.dialogs.SWTDialogManager;
 import org.eclipse.rcptt.tesla.swt.dnd.LocalClipboard;
 import org.eclipse.rcptt.tesla.swt.events.TeslaEventManager;
-import org.eclipse.rcptt.tesla.swt.events.TeslaTimerExecManager;
 import org.eclipse.rcptt.tesla.swt.events.TeslaEventManager.IUnhandledNativeDialogHandler;
+import org.eclipse.rcptt.tesla.swt.events.TeslaTimerExecManager;
 import org.eclipse.rcptt.tesla.swt.workbench.EclipseWorkbenchProvider;
 import org.eclipse.rcptt.tesla.ui.IImageAssertSupport;
 import org.eclipse.rcptt.tesla.ui.SWTTeslaActivator;
 import org.eclipse.rcptt.tesla.ui.describers.IWidgetDescriber;
 import org.eclipse.rcptt.tesla.ui.describers.WidgetDescriber;
+import org.eclipse.rcptt.util.StringUtils;
+import org.eclipse.rcptt.util.swt.StringLines;
+import org.eclipse.rcptt.util.swt.TableTreeUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Slider;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.handlers.IHandlerService;
 
 public class SWTUIProcessor implements ITeslaCommandProcessor,
 		IScreenshotFactory, IModelMapperHelper {
@@ -2814,6 +2814,11 @@
 		if (!uiElement.getKind().is(ElementKind.Unknown)) {
 			nde = root.child(uiElement.getKind().name() + "("
 					+ (text != null ? text.trim() : "") + ")");
+			// Adds decorators
+			for (ControlDecoration decorator : uiElement.getDecorators()) {
+				if (decorator.isVisible())
+					nde.child("ControlDecoration(" + decorator.getDescriptionText() + ")");
+			}
 		}
 		try {
 			SWTUIElement[] children = getPlayer().children.collectFor(