ASSIGNED - bug 230136: [xslt][editor] Content Assistance for exclude-result-prefix
https://bugs.eclipse.org/bugs/show_bug.cgi?id=230136
diff --git a/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.jdt.core.prefs
index 9a93417..7022328 100644
--- a/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Mar 20 20:08:20 GMT-05:00 2008
+#Fri Sep 05 23:58:31 GMT 2008
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -8,13 +8,34 @@
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
@@ -22,4 +43,42 @@
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
diff --git a/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.pde.prefs b/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..ade4019
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,22 @@
+#Fri Sep 05 23:58:31 GMT 2008
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/AbstractXSLContentAssistRequest.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/AbstractXSLContentAssistRequest.java
new file mode 100644
index 0000000..ea70f82
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/AbstractXSLContentAssistRequest.java
@@ -0,0 +1,88 @@
+package org.eclipse.wst.xsl.ui.internal.contentassist;
+
+import java.util.Collection;
+
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo;
+import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceTable;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public abstract class AbstractXSLContentAssistRequest extends
+		ContentAssistRequest {
+	
+	protected ITextViewer textViewer = null;
+
+	/**
+	 * @param node
+	 * @param parent
+	 * @param documentRegion
+	 * @param completionRegion
+	 * @param begin
+	 * @param length
+	 * @param filter
+	 * @deprecated  
+	 */
+	public AbstractXSLContentAssistRequest(Node node, Node parent,
+			IStructuredDocumentRegion documentRegion,
+			ITextRegion completionRegion, int begin, int length, String filter) {
+		super(node, parent, documentRegion, completionRegion, begin, length, filter);
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * Handles Content Assistance requests for Select Attributes.  This is called an instantiated
+	 * through the use of the computeProposals method from the XSLContentAssistProcessor.  It will
+	 * calculate the available proposals that are available for the XSL select attribute.
+	 * 
+	 * @param node
+	 * @param parent
+	 * @param documentRegion
+	 * @param completionRegion
+	 * @param begin
+	 * @param length
+	 * @param filter
+	 * @param textViewer
+	 */
+	
+	public AbstractXSLContentAssistRequest(Node node, Node parent,
+			IStructuredDocumentRegion documentRegion,
+			ITextRegion completionRegion, int begin, int length, String filter,
+			ITextViewer textViewer) {
+		super(node, parent, documentRegion, completionRegion, begin, length, filter);
+		this.textViewer = textViewer;
+	}
+
+	/**
+	 * Checks to make sure that the NodeList has data
+	 * @param nodes A NodeList object
+	 * @return True if has data, false if empty
+	 */
+	protected boolean hasNodes(NodeList nodes) {
+		return nodes != null && nodes.getLength() > 0;
+	}
+
+	/**
+	 * Get the cursor position within the Text Viewer
+	 * @return An int value containing the cursor position
+	 */
+	protected int getCursorPosition() {
+		return textViewer.getTextWidget().getCaretOffset();
+	}
+	
+	protected Collection<NamespaceInfo> getNamespaces(IDOMElement element) {
+		 NamespaceTable table = new NamespaceTable(element.getOwnerDocument());
+		 table.visitElement(element);
+		 
+		 Collection<NamespaceInfo> namespaceInfoList =  table.getNamespaceInfoCollection();
+		 
+		 return namespaceInfoList;
+	}
+	
+		
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/ExcludeResultPrefixesContentAssist.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/ExcludeResultPrefixesContentAssist.java
new file mode 100644
index 0000000..037d828
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/ExcludeResultPrefixesContentAssist.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ *Copyright (c) 2008 Standards for Technology in Automotive Retail and others.
+ *All rights reserved. This program and the accompanying materials
+ *are made available under the terms of the Eclipse Public License v1.0
+ *which accompanies this distribution, and is available at
+ *http://www.eclipse.org/legal/epl-v10.html
+ *
+ *Contributors:
+ *    David Carver (STAR) - bug 230136 - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.wst.xsl.ui.internal.contentassist;
+
+import java.util.Collection;
+
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
+import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xsl.core.XSLCore;
+import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper;
+import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImages;
+import org.w3c.dom.Node;
+
+/**
+ * Provides content assistance for xsl elements that have the
+ * exclude-result-prefixes attribute.  This will provide a list 
+ * of all known result prefixes that aren't currently in the attribute
+ * list.  This list is a space separated list.   The XSL prefix is
+ * excluded.
+ * 
+ * @author dcarver
+ * @since 1.0
+ * 
+ */
+public class ExcludeResultPrefixesContentAssist extends AbstractXSLContentAssistRequest {
+
+	private static final String EXCLUDE_RESULT_PREFIXES = "exclude-result-prefixes"; //$NON-NLS-1$
+	private static final String DEFAULT = "#all"; //$NON-NLS-1$
+	private static final String ADDITIONAL_INFO = Messages.getString("ExcludeResultPrefixesContentAssist.2"); //$NON-NLS-1$
+	protected String[] tokens = null;
+	
+	/**
+	 * Handles Content Assistance requests for Select Attributes.  This is called an instantiated
+	 * through the use of the computeProposals method from the XSLContentAssistProcessor.  It will
+	 * calculate the available proposals that are available for the XSL select attribute.
+	 * 
+	 * @param node
+	 * @param parent
+	 * @param documentRegion
+	 * @param completionRegion
+	 * @param begin
+	 * @param length
+	 * @param filter
+	 * @param textViewer
+	 */
+	
+	@SuppressWarnings("deprecation")
+	public ExcludeResultPrefixesContentAssist(Node node, Node parent,
+			IStructuredDocumentRegion documentRegion,
+			ITextRegion completionRegion, int begin, int length, String filter,
+			ITextViewer textViewer) {
+		super(node, parent, documentRegion, completionRegion, begin, length, filter);
+		this.textViewer = textViewer;
+	}
+	
+	/** 
+	 * (non-Javadoc)
+	 * @see org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest#getCompletionProposals()
+	 */
+	@Override
+	public ICompletionProposal[] getCompletionProposals() {
+		 proposals.clear();
+		 
+		 IDOMAttr attrNode = (IDOMAttr)((IDOMElement)getNode()).getAttributeNode(EXCLUDE_RESULT_PREFIXES);
+		 String excludeResultPrefixes = attrNode.getValue();
+		 int offset = getCursorPosition();
+		 
+		 if (excludeResultPrefixes == null) {
+			 return super.getCompletionProposals();
+		 }
+		 
+		 tokens = excludeResultPrefixes.split("\\s"); //$NON-NLS-1$
+		 if (tokens[0].equals("")) { //$NON-NLS-1$
+			 CustomCompletionProposal proposal = new CustomCompletionProposal(
+						DEFAULT, offset, 0, DEFAULT.length(),
+						XSLPluginImageHelper.getInstance().getImage(XSLPluginImages.IMG_PREFIX),
+						DEFAULT, null, null, 0);
+			 addProposal(proposal);
+		 }
+		 Collection<NamespaceInfo> namespaces = this.getNamespaces((IDOMElement)node);
+		 for (NamespaceInfo namespace : namespaces) {
+			 
+			 if (includePrefix(namespace)) { 
+				 CustomCompletionProposal proposal = new CustomCompletionProposal(
+							namespace.prefix, offset, 0, namespace.prefix.length(),
+							XSLPluginImageHelper.getInstance().getImage(XSLPluginImages.IMG_PREFIX),
+							namespace.prefix, null, namespace.uri, 0);
+				 addProposal(proposal);
+			 }
+		 }
+		 
+		return super.getCompletionProposals();
+	}
+
+	protected boolean includePrefix(NamespaceInfo namespace) {
+		return !prefixExists(namespace.prefix) && !namespace.prefix.equals("") && !namespace.uri.equals(XSLCore.XSL_NAMESPACE_URI); //$NON-NLS-1$
+	}
+	
+	
+	protected boolean prefixExists(String prefix) {
+		if (tokens == null || tokens.length == 0) {
+			return false;
+		}
+		for (int cnt = 0; cnt < tokens.length; cnt++) {
+			if (prefix.equals(tokens[cnt])) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/SelectAttributeContentAssist.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/SelectAttributeContentAssist.java
index 6320dc9..9e2f325 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/SelectAttributeContentAssist.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/SelectAttributeContentAssist.java
@@ -22,7 +22,6 @@
 import org.eclipse.wst.xsl.ui.internal.contentassist.CustomCompletionProposal;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest;
 import org.eclipse.wst.xml.xpath.core.internal.parser.XPathParser;
 import org.eclipse.wst.xml.xpath.core.util.XSLTXPathHelper;
 import org.eclipse.wst.xml.xpath.ui.internal.contentassist.XPathTemplateCompletionProcessor;
@@ -41,7 +40,7 @@
  * @author dcarver
  *
  */
-public class SelectAttributeContentAssist extends ContentAssistRequest {
+public class SelectAttributeContentAssist extends AbstractXSLContentAssistRequest {
 	
 	private static final String XPATH_GLOBAL_VARIABLES = "/xsl:stylesheet/xsl:variable"; //$NON-NLS-1$
 
@@ -64,9 +63,6 @@
 	private List<String> fTemplateContexts = new ArrayList<String>();
 	private static final byte[] XPATH_LOCK = new byte[0];
 	
-	private ITextViewer textViewer = null;
-	
-
 	/**
 	 * Handles Content Assistance requests for Select Attributes.  This is called an instantiated
 	 * through the use of the computeProposals method from the XSLContentAssistProcessor.  It will
@@ -265,24 +261,6 @@
 		}
 	}
 
-	/**
-	 * Checks to make sure that the NodeList has data
-	 * @param nodes A NodeList object
-	 * @return True if has data, false if empty
-	 */
-	private boolean hasNodes(NodeList nodes) {
-		return nodes != null && nodes.getLength() > 0;
-	}
-
-	/**
-	 * Get the cursor position within the Text Viewer
-	 * @return An int value containing the cursor position
-	 */
-	private int getCursorPosition() {
-		return textViewer.getTextWidget().getCaretOffset();
-	}
-
-
 	private XPathTemplateCompletionProcessor getTemplateCompletionProcessor() {
 		if (fTemplateProcessor == null) {
 			fTemplateProcessor = new XPathTemplateCompletionProcessor();
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/XSLContentAssistProcessor.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/XSLContentAssistProcessor.java
index 1cb3b01..d506feb 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/XSLContentAssistProcessor.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/XSLContentAssistProcessor.java
@@ -15,6 +15,8 @@
  *******************************************************************************/
 package org.eclipse.wst.xsl.ui.internal.contentassist;
 
+import java.util.ArrayList;
+
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
@@ -53,6 +55,7 @@
 	private static final String ATTR_SELECT = "select"; //$NON-NLS-1$
 	private static final String ATTR_TEST = "test"; //$NON-NLS-1$
 	private static final String ATTR_MATCH = "match"; //$NON-NLS-1$
+	private static final String ATTR_EXCLUDE_RESULT_PREFIXES = "exclude-result-prefixes"; //$NON-NLS-1$
 	/**
 	 * Retrieve all global variables in the stylesheet.
 	 */
@@ -123,23 +126,33 @@
 			IStructuredDocumentRegion sdRegion, ITextRegion completionRegion,
 			ICompletionProposal[] proposals, String matchString) {
 		ContentAssistRequest contentAssistRequest;
-		if (this.hasAttributeAtTextRegion(ATTR_SELECT, xmlNode.getAttributes(), completionRegion)) {
+		NamedNodeMap nodeMap = xmlNode.getAttributes();
+		
+		if (this.hasAttributeAtTextRegion(ATTR_SELECT, nodeMap, completionRegion)) {
 			contentAssistRequest = new SelectAttributeContentAssist(
 					xmlNode, xmlNode.getParentNode(), sdRegion,
 					completionRegion, documentPosition, 0, matchString,
 					textViewer);
 		 proposals = contentAssistRequest.getCompletionProposals();
 		} 
-		if (this.hasAttributeAtTextRegion(ATTR_TEST, xmlNode.getAttributes(), completionRegion)) {
+		if (this.hasAttributeAtTextRegion(ATTR_TEST, nodeMap, completionRegion)) {
 			contentAssistRequest = new TestAttributeContentAssist(
 					xmlNode, xmlNode.getParentNode(), sdRegion,
 					completionRegion, documentPosition, 0, matchString,
 					textViewer);
 			proposals = contentAssistRequest.getCompletionProposals();
 		}
+		if (this.hasAttributeAtTextRegion(ATTR_EXCLUDE_RESULT_PREFIXES, nodeMap, completionRegion)) {
+			contentAssistRequest = new ExcludeResultPrefixesContentAssist(
+					xmlNode, xmlNode.getParentNode(), sdRegion,
+					completionRegion, documentPosition, 0, matchString,
+					textViewer);
+			
+			proposals = contentAssistRequest.getCompletionProposals();
+		}
 		return proposals;
 	}
-
+	
 	/**
 	 * StructuredTextViewer must be set before using this.
 	 * 
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/messages.properties b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/messages.properties
index 67591fe..ecbe244 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/messages.properties
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/contentassist/messages.properties
@@ -1 +1,2 @@
+ExcludeResultPrefixesContentAssist.2=XML Namespace:
 XPathCustomTemplateProposal.1=Description:\r\n
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/util/XSLPluginImages.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/util/XSLPluginImages.java
index dfc21c6..ec4f780 100755
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/util/XSLPluginImages.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/util/XSLPluginImages.java
@@ -33,6 +33,12 @@
 	/**
 	 * Path to the XPATH Images used for Content Assist
 	 */
-	public static final String IMG_OPERATOR = "icons/full/operation.gif"; //$NON-NLS-1$	
+	public static final String IMG_OPERATOR = "icons/full/operation.gif"; //$NON-NLS-1$
+	
+	/**
+	 * Path to the XML Prefix Image used for Content Assist
+	 */
+	public static final String IMG_PREFIX = "icons/full/package_obj.gif"; //$NON-NLS-1$
+	
 	
 }