bug 413518: [outline] Support StyledText in outline
diff --git a/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/completion/LuaCompletionProposalLabelProvide.java b/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/completion/LuaCompletionProposalLabelProvide.java
index cf9fdb8..0696a89 100644
--- a/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/completion/LuaCompletionProposalLabelProvide.java
+++ b/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/completion/LuaCompletionProposalLabelProvide.java
@@ -19,14 +19,16 @@
 import org.eclipse.dltk.core.IType;
 import org.eclipse.dltk.core.ModelException;
 import org.eclipse.dltk.ui.text.completion.CompletionProposalLabelProvider;
+import org.eclipse.dltk.ui.text.completion.ICompletionProposalLabelProviderExtension;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.ldt.core.internal.ast.models.LuaDLTKModelUtils;
 import org.eclipse.ldt.ui.internal.Activator;
 import org.eclipse.ldt.ui.internal.ImageConstants;
 import org.eclipse.ldt.ui.internal.editor.navigation.Messages;
 
 //TODO factorize some code with LuaLabelProvider
-public class LuaCompletionProposalLabelProvide extends CompletionProposalLabelProvider {
+public class LuaCompletionProposalLabelProvide extends CompletionProposalLabelProvider implements ICompletionProposalLabelProviderExtension {
 
 	public LuaCompletionProposalLabelProvide() {
 	}
@@ -82,21 +84,8 @@
 
 	// TODO BUG_ECLIPSE 403751
 	protected String createFieldProposalLabel(CompletionProposal proposal) {
-		IModelElement element = proposal.getModelElement();
-		if (element != null && element.getElementType() == IModelElement.FIELD && element.exists()) {
-			final IField field = (IField) element;
-			try {
-				String type = field.getType();
-				if (type != null) {
-					return proposal.getName() + " : " + type; //$NON-NLS-1$
-				}
-				// CHECKSTYLE:OFF
-			} catch (ModelException e) {
-				// ignore
-				// CHECKSTYLE:ON
-			}
-		}
-		return proposal.getName();
+		StyledString string = createStyledFieldProposalLabel(proposal);
+		return string.toString();
 	}
 
 	/**
@@ -160,4 +149,48 @@
 		}
 		return super.createImageDescriptor(proposal);
 	}
+
+	public StyledString createStyledFieldProposalLabel(CompletionProposal proposal) {
+		StyledString result = new StyledString(proposal.getName());
+		IModelElement element = proposal.getModelElement();
+		if (element != null && element.getElementType() == IModelElement.FIELD && element.exists()) {
+			final IField field = (IField) element;
+			try {
+				String type = field.getType();
+				if (type != null) {
+					return result.append(new StyledString(" : " + type, StyledString.DECORATIONS_STYLER)); //$NON-NLS-1$
+				}
+				// CHECKSTYLE:OFF
+			} catch (ModelException e) {
+				// ignore
+				// CHECKSTYLE:ON
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public StyledString createStyledLabel(CompletionProposal fProposal) {
+		return new StyledString(createLabel(fProposal));
+	}
+
+	@Override
+	public StyledString createStyledKeywordLabel(CompletionProposal proposal) {
+		return new StyledString(createKeywordLabel(proposal));
+	}
+
+	@Override
+	public StyledString createStyledSimpleLabel(CompletionProposal proposal) {
+		return new StyledString(createSimpleLabel(proposal));
+	}
+
+	@Override
+	public StyledString createStyledTypeProposalLabel(CompletionProposal proposal) {
+		return new StyledString(createTypeProposalLabel(proposal));
+	}
+
+	@Override
+	public StyledString createStyledSimpleLabelWithType(CompletionProposal proposal) {
+		return new StyledString(createSimpleLabelWithType(proposal));
+	}
 }
diff --git a/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/navigation/LuaLabelProvider.java b/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/navigation/LuaLabelProvider.java
index 3f1ca01..98b15b9 100644
--- a/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/navigation/LuaLabelProvider.java
+++ b/plugins/org.eclipse.ldt.ui/src/org/eclipse/ldt/ui/internal/editor/navigation/LuaLabelProvider.java
@@ -10,38 +10,27 @@
  *******************************************************************************/
 package org.eclipse.ldt.ui.internal.editor.navigation;
 
+import org.eclipse.dltk.core.IField;
 import org.eclipse.dltk.core.IMember;
-import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.IModelElement;
 import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.ui.ScriptElementLabels;
+import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.ldt.core.internal.ast.models.LuaDLTKModelUtils;
 import org.eclipse.ldt.ui.internal.Activator;
 import org.eclipse.ldt.ui.internal.ImageConstants;
 import org.eclipse.swt.graphics.Image;
 
-public class LuaLabelProvider extends LabelProvider {
+public class LuaLabelProvider extends LabelProvider implements IStyledLabelProvider {
 
 	@Override
 	public String getText(final Object element) {
-		final IMember member = element instanceof IMember ? (IMember) element : null;
-		if (member == null)
-			return null;
-		try {
-			// Special icon for private type
-			if (member.exists()) {
-				if (LuaDLTKModelUtils.isType(member) || LuaDLTKModelUtils.isModule(member)) {
-					IType type = (IType) member;
-					if (type.getSuperClasses() != null && type.getSuperClasses().length >= 1) {
-						return type.getElementName() + " -> " + type.getSuperClasses()[0]; //$NON-NLS-1$
-					} else {
-						return type.getElementName();
-					}
-				}
-			}
-		} catch (ModelException e) {
-			Activator.logError(Messages.LuaCompletionProvidersFlags, e);
-		}
-		// DLTK default behavior
+		StyledString styledText = getStyledText(element);
+		if (styledText != null)
+			return styledText.toString();
 		return null;
 	}
 
@@ -83,4 +72,29 @@
 		// DLTK default behavior
 		return null;
 	}
+
+	@Override
+	public StyledString getStyledText(Object element) {
+		if (element instanceof IModelElement) {// get name
+			StyledString result = new StyledString();
+			StringBuffer buf = new StringBuffer(61);
+			ScriptElementLabels.getDefault().getElementLabel((IModelElement) element,
+					AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | ScriptElementLabels.ALL_CATEGORY | ScriptElementLabels.M_APP_RETURNTYPE, buf);
+			result.append(buf.toString());
+
+			// get field type
+			if (element instanceof IField) {
+				try {
+					if (((IField) element).getType() != null)
+						result.append(new StyledString(" : " + ((IField) element).getType(), StyledString.DECORATIONS_STYLER)); //$NON-NLS-1$
+					// CHECKSTYLE:OFF
+				} catch (ModelException e) {
+					// do nothing, we just not be able to get the type
+					// CHECKSTYLE:ON
+				}
+			}
+			return result;
+		}
+		return null;
+	}
 }