Author: vrubezhny
Date: 2009-12-04 11:07:01 -0500 (Fri, 04 Dec 2009)
New Revision: 19059
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/XmlContentAssistProcessor.java
Log:
JBIDE-4877: completion in xhtml should not require namespace to match on tag
CA proposal for the tag names calculation is modified
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/XmlContentAssistProcessor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/XmlContentAssistProcessor.java 2009-12-04
16:03:56 UTC (rev 19058)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/XmlContentAssistProcessor.java 2009-12-04
16:07:01 UTC (rev 19059)
@@ -10,6 +10,9 @@
******************************************************************************/
package org.jboss.tools.jst.jsp.contentassist;
+import java.util.List;
+import java.util.Map;
+
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest;
@@ -24,6 +27,7 @@
import org.jboss.tools.jst.web.kb.PageContextFactory;
import org.jboss.tools.jst.web.kb.PageProcessor;
import org.jboss.tools.jst.web.kb.KbQuery.Type;
+import org.jboss.tools.jst.web.kb.taglib.INameSpace;
/**
*
@@ -45,10 +49,13 @@
@Override
protected KbQuery createKbQuery(Type type, String query, String stringQuery) {
+ return createKbQuery(type, query, stringQuery, getTagPrefix(), getTagUri());
+ }
+
+ @Override
+ protected KbQuery createKbQuery(Type type, String query, String stringQuery, String
prefix, String uri) {
KbQuery kbQuery = new KbQuery();
- String prefix = getTagPrefix();
- String uri = getTagUri();
String[] parentTags = getParentTags(type == Type.ATTRIBUTE_NAME || type ==
Type.ATTRIBUTE_VALUE);
String parent = getParent(type == Type.ATTRIBUTE_VALUE, type == Type.ATTRIBUTE_NAME);
String queryValue = query;
@@ -95,56 +102,66 @@
return;
}
- try {
- String matchString = contentAssistRequest.getMatchString();
- String query = matchString;
- if (query == null)
- query = ""; //$NON-NLS-1$
- String stringQuery = "<" + matchString; //$NON-NLS-1$
-
- KbQuery kbQuery = createKbQuery(Type.TAG_NAME, query, stringQuery);
- TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
-
- for (int i = 0; proposals != null && i < proposals.length; i++) {
- TextProposal textProposal = proposals[i];
+ addTagNameProposals(contentAssistRequest, childPosition);
+ }
+
+ private void addTagNameProposalsForPrefix(
+ ContentAssistRequest contentAssistRequest,
+ int childPosition,
+ String query,
+ String prefix,
+ String uri,
+ int defaultRelevance
+ ) {
+ if (query == null)
+ query = ""; //$NON-NLS-1$
+ String stringQuery = "<" + query; //$NON-NLS-1$
- String replacementString = textProposal.getReplacementString();
- String closingTag = textProposal.getLabel();
- if (closingTag != null && closingTag.startsWith("<")) {
//$NON-NLS-1$
- closingTag = closingTag.substring(1);
- }
+ KbQuery kbQuery = createKbQuery(Type.TAG_NAME, query, stringQuery, prefix, uri);
+ TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
+
+ for (int i = 0; proposals != null && i < proposals.length; i++) {
+ TextProposal textProposal = proposals[i];
+
+ String replacementString = textProposal.getReplacementString();
+ String closingTag = textProposal.getLabel();
+ if (closingTag != null && closingTag.startsWith("<")) {
//$NON-NLS-1$
+ closingTag = closingTag.substring(1);
+ }
+
+ if (replacementString.startsWith("<")) { //$NON-NLS-1$
+ // Because the tag starting char is already in the text
+ replacementString = replacementString.substring(1);
+ }
+ if (!replacementString.endsWith("/>")) { //$NON-NLS-1$
+ replacementString += "</" + closingTag + ">"; //$NON-NLS-1$
//$NON-NLS-2$
+ }
- if (!replacementString.endsWith("/>")) { //$NON-NLS-1$
- replacementString += "</" + closingTag + ">";
//$NON-NLS-1$ //$NON-NLS-2$
- }
+
+ int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
+ int replacementLength = contentAssistRequest.getReplacementLength();
+ int cursorPosition = getCursorPositionForProposedText(replacementString);
+ Image image = textProposal.getImage();
+ if (image == null) {
+ image =
XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_TAG_GENERIC);
+ }
+ String displayString = closingTag;
+ IContextInformation contextInformation = null;
+ String additionalProposalInfo = textProposal.getContextInfo();
+ int relevance = textProposal.getRelevance();
+ if (relevance == TextProposal.R_NONE) {
+ relevance = defaultRelevance == TextProposal.R_NONE? TextProposal.R_TAG_INSERTION :
defaultRelevance;
+ }
- int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
- int replacementLength = contentAssistRequest.getReplacementLength();
- int cursorPosition = getCursorPositionForProposedText(replacementString);
- Image image = textProposal.getImage();
- if (image == null) {
- image =
XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_TAG_GENERIC);
- }
- String displayString = closingTag;
- IContextInformation contextInformation = null;
- String additionalProposalInfo = textProposal.getContextInfo();
- int relevance = textProposal.getRelevance();
- if (relevance == TextProposal.R_NONE) {
- relevance = TextProposal.R_TAG_INSERTION;
- }
- AutoContentAssistantProposal proposal = new AutoContentAssistantProposal(true,
replacementString,
- replacementOffset, replacementLength, cursorPosition, image, displayString,
- contextInformation, additionalProposalInfo, relevance);
+ AutoContentAssistantProposal proposal = new AutoContentAssistantProposal(true,
replacementString,
+ replacementOffset, replacementLength, cursorPosition, image, displayString,
+ contextInformation, additionalProposalInfo, relevance);
- contentAssistRequest.addProposal(proposal);
- }
- } finally {
+ contentAssistRequest.addProposal(proposal);
}
- return;
}
-
/**
* Calculates and adds the tag name proposals to the Content Assist Request object
*
@@ -154,59 +171,36 @@
@Override
protected void addTagNameProposals(
ContentAssistRequest contentAssistRequest, int childPosition) {
- try {
- String matchString = contentAssistRequest.getMatchString();
- String query = matchString;
- if (query == null)
- query = ""; //$NON-NLS-1$
- String stringQuery = "<" + matchString; //$NON-NLS-1$
-
- KbQuery kbQuery = createKbQuery(Type.TAG_NAME, query, stringQuery);
- TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
+
+ String mainPrefix = getTagPrefix();
+ String mainURI = getTagUri();
+
+ String query = contentAssistRequest.getMatchString();
+ addTagNameProposalsForPrefix(contentAssistRequest, childPosition, query, mainPrefix,
mainURI, TextProposal.R_TAG_INSERTION);
+
+ if (query == null || query.length() == 0 || query.contains(":"))
//$NON-NLS-1$
+ return;
+
+ // Make an additional proposals to allow prefixed tags to be entered with no prefix
typed
+ ELContext elContext = getContext();
+ if (elContext instanceof IPageContext) {
+ IPageContext pageContext = (IPageContext)elContext;
+ Map<String, List<INameSpace>> nsMap =
pageContext.getNameSpaces(contentAssistRequest.getReplacementBeginPosition());
+ if (nsMap == null) return;
- for (int i = 0; proposals != null && i < proposals.length; i++) {
- TextProposal textProposal = proposals[i];
+ for (List<INameSpace> namespaces : nsMap.values()) {
+ if (namespaces == null) continue;
- String replacementString = textProposal.getReplacementString();
- String closingTag = textProposal.getLabel();
- if (closingTag != null && closingTag.startsWith("<")) {
//$NON-NLS-1$
- closingTag = closingTag.substring(1);
+ for (INameSpace namespace : namespaces) {
+ String possiblePrefix = namespace.getPrefix();
+ String possibleURI = namespace.getURI();
+ String possibleQuery = namespace.getPrefix() + ":" + query; //$NON-NLS-1$
+ addTagNameProposalsForPrefix(contentAssistRequest, childPosition,
+ possibleQuery, possiblePrefix, possibleURI,
+ TextProposal.R_TAG_INSERTION - 1); // TODO: Make relevance to be lower here
}
-
- if (replacementString.startsWith("<")) { //$NON-NLS-1$
- // Because the tag starting char is already in the text
- replacementString = replacementString.substring(1);
- }
- if (!replacementString.endsWith("/>")) { //$NON-NLS-1$
- replacementString += "</" + closingTag + ">";
//$NON-NLS-1$ //$NON-NLS-2$
- }
-
-
- int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
- int replacementLength = contentAssistRequest.getReplacementLength();
- int cursorPosition = getCursorPositionForProposedText(replacementString);
- Image image = textProposal.getImage();
- if (image == null) {
- image =
XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_TAG_GENERIC);
- }
-
- String displayString = closingTag;
- IContextInformation contextInformation = null;
- String additionalProposalInfo = textProposal.getContextInfo();
- int relevance = textProposal.getRelevance();
- if (relevance == TextProposal.R_NONE) {
- relevance = TextProposal.R_TAG_INSERTION;
- }
-
- AutoContentAssistantProposal proposal = new AutoContentAssistantProposal(true,
replacementString,
- replacementOffset, replacementLength, cursorPosition, image, displayString,
- contextInformation, additionalProposalInfo, relevance);
-
- contentAssistRequest.addProposal(proposal);
}
- } finally {
}
- return;
}
/**
@@ -219,116 +213,110 @@
if (prefix != null && prefix.isELStarted()) {
return;
}
- try {
- String matchString = contentAssistRequest.getMatchString();
- String query = matchString;
- if (query == null)
- query = ""; //$NON-NLS-1$
- String stringQuery = matchString;
+
+ String matchString = contentAssistRequest.getMatchString();
+ String query = matchString;
+ if (query == null)
+ query = ""; //$NON-NLS-1$
+ String stringQuery = matchString;
- KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, query, stringQuery);
- TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
+ KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, query, stringQuery);
+ TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
- for (int i = 0; proposals != null && i < proposals.length; i++) {
- TextProposal textProposal = proposals[i];
- int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
- int replacementLength = contentAssistRequest.getReplacementLength();
- if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
- replacementOffset += textProposal.getStart() + 1;
- replacementLength = textProposal.getEnd() - textProposal.getStart();
- }
- String replacementString = "\"" + textProposal.getReplacementString()
+ "\""; //$NON-NLS-1$ //$NON-NLS-2$
- if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
- replacementString = textProposal.getReplacementString();
- }
- int cursorPosition = getCursorPositionForProposedText(replacementString);
- Image image = textProposal.getImage();
- String displayString = textProposal.getLabel() == null ?
- replacementString :
- textProposal.getLabel();
- IContextInformation contextInformation = null;
- String additionalProposalInfo = textProposal.getContextInfo();
- int relevance = textProposal.getRelevance();
- if (relevance == TextProposal.R_NONE) {
- relevance = TextProposal.R_JSP_ATTRIBUTE_VALUE;
- }
+ for (int i = 0; proposals != null && i < proposals.length; i++) {
+ TextProposal textProposal = proposals[i];
+ int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
+ int replacementLength = contentAssistRequest.getReplacementLength();
+ if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
+ replacementOffset += textProposal.getStart() + 1;
+ replacementLength = textProposal.getEnd() - textProposal.getStart();
+ }
+ String replacementString = "\"" + textProposal.getReplacementString() +
"\""; //$NON-NLS-1$ //$NON-NLS-2$
+ if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
+ replacementString = textProposal.getReplacementString();
+ }
+ int cursorPosition = getCursorPositionForProposedText(replacementString);
+ Image image = textProposal.getImage();
+ String displayString = textProposal.getLabel() == null ?
+ replacementString :
+ textProposal.getLabel();
+ IContextInformation contextInformation = null;
+ String additionalProposalInfo = textProposal.getContextInfo();
+ int relevance = textProposal.getRelevance();
+ if (relevance == TextProposal.R_NONE) {
+ relevance = TextProposal.R_JSP_ATTRIBUTE_VALUE;
+ }
- AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal(replacementString,
- replacementOffset, replacementLength, cursorPosition, image, displayString,
- contextInformation, additionalProposalInfo, relevance);
+ AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal(replacementString,
+ replacementOffset, replacementLength, cursorPosition, image, displayString,
+ contextInformation, additionalProposalInfo, relevance);
- contentAssistRequest.addProposal(proposal);
- }
- } finally {
+ contentAssistRequest.addProposal(proposal);
}
}
@Override
protected void addAttributeValueELProposals(ContentAssistRequest contentAssistRequest)
{
- try {
- TextRegion prefix = getELPrefix();
- if (prefix == null) {
- return;
- }
+ TextRegion prefix = getELPrefix();
+ if (prefix == null) {
+ return;
+ }
- if(!prefix.isELStarted()) {
- AutoContentAssistantProposal proposal = new AutoContentAssistantProposal(true,
"#{}", //$NON-NLS-1$
- getOffset(), 0, 2, JSF_EL_PROPOSAL_IMAGE,
JstUIMessages.JspContentAssistProcessor_NewELExpression,
- null, JstUIMessages.JspContentAssistProcessor_NewELExpressionAttrInfo,
TextProposal.R_XML_ATTRIBUTE_VALUE_TEMPLATE);
+ if(!prefix.isELStarted()) {
+ AutoContentAssistantProposal proposal = new AutoContentAssistantProposal(true,
"#{}", //$NON-NLS-1$
+ getOffset(), 0, 2, JSF_EL_PROPOSAL_IMAGE,
JstUIMessages.JspContentAssistProcessor_NewELExpression,
+ null, JstUIMessages.JspContentAssistProcessor_NewELExpressionAttrInfo,
TextProposal.R_XML_ATTRIBUTE_VALUE_TEMPLATE);
- contentAssistRequest.addProposal(proposal);
- return;
- }
- String matchString = "#{" + prefix.getText(); //$NON-NLS-1$
- String query = matchString;
- if (query == null)
- query = ""; //$NON-NLS-1$
- String stringQuery = matchString;
+ contentAssistRequest.addProposal(proposal);
+ return;
+ }
+ String matchString = "#{" + prefix.getText(); //$NON-NLS-1$
+ String query = matchString;
+ if (query == null)
+ query = ""; //$NON-NLS-1$
+ String stringQuery = matchString;
+
+ int beginChangeOffset = prefix.getStartOffset() + prefix.getOffset();
+
+ KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, query, stringQuery);
+ TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
+
+ for (int i = 0; proposals != null && i < proposals.length; i++) {
+ TextProposal textProposal = proposals[i];
- int beginChangeOffset = prefix.getStartOffset() + prefix.getOffset();
-
- KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, query, stringQuery);
- TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
+ int replacementOffset = beginChangeOffset;
+ int replacementLength = prefix.getLength();
+ String replacementString = prefix.getText().substring(0, replacementLength) +
textProposal.getReplacementString();
+ int cursorPosition = replacementString.length();
+ Image image = textProposal.getImage();
- for (int i = 0; proposals != null && i < proposals.length; i++) {
- TextProposal textProposal = proposals[i];
-
- int replacementOffset = beginChangeOffset;
- int replacementLength = prefix.getLength();
- String replacementString = prefix.getText().substring(0, replacementLength) +
textProposal.getReplacementString();
- int cursorPosition = replacementString.length();
- Image image = textProposal.getImage();
-
- // JBIDE-512, JBIDE-2541 related changes ===>>>
+ // JBIDE-512, JBIDE-2541 related changes ===>>>
// String displayString = prefix.getText().substring(0, replacementLength) +
textProposal.getReplacementString();
- String displayString = textProposal.getLabel();
- if (displayString == null)
- displayString = textProposal.getReplacementString() == null ? replacementString :
textProposal.getReplacementString();
-
- // <<<=== JBIDE-512, JBIDE-2541 related changes
+ String displayString = textProposal.getLabel();
+ if (displayString == null)
+ displayString = textProposal.getReplacementString() == null ? replacementString :
textProposal.getReplacementString();
+ // <<<=== JBIDE-512, JBIDE-2541 related changes
- IContextInformation contextInformation = null;
- String additionalProposalInfo = (textProposal.getContextInfo() == null ? ""
: textProposal.getContextInfo()); //$NON-NLS-1$
- int relevance = textProposal.getRelevance();
- if (relevance == TextProposal.R_NONE) {
- relevance = TextProposal.R_JSP_JSF_EL_VARIABLE_ATTRIBUTE_VALUE;
- }
+ IContextInformation contextInformation = null;
+ String additionalProposalInfo = (textProposal.getContextInfo() == null ? ""
: textProposal.getContextInfo()); //$NON-NLS-1$
+ int relevance = textProposal.getRelevance();
+ if (relevance == TextProposal.R_NONE) {
+ relevance = TextProposal.R_JSP_JSF_EL_VARIABLE_ATTRIBUTE_VALUE;
+ }
- AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal(replacementString,
- replacementOffset, replacementLength, cursorPosition, image, displayString,
- contextInformation, additionalProposalInfo, relevance);
+ AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal(replacementString,
+ replacementOffset, replacementLength, cursorPosition, image, displayString,
+ contextInformation, additionalProposalInfo, relevance);
- contentAssistRequest.addProposal(proposal);
- }
+ contentAssistRequest.addProposal(proposal);
+ }
- if (prefix.isELStarted() && !prefix.isELClosed()) {
- AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal("}", //$NON-NLS-1$
- getOffset(), 0, 1, JSF_EL_PROPOSAL_IMAGE,
JstUIMessages.JspContentAssistProcessor_CloseELExpression,
- null, JstUIMessages.JspContentAssistProcessor_CloseELExpressionInfo,
TextProposal.R_XML_ATTRIBUTE_VALUE_TEMPLATE);
+ if (prefix.isELStarted() && !prefix.isELClosed()) {
+ AutoContentAssistantProposal proposal = new
AutoContentAssistantProposal("}", //$NON-NLS-1$
+ getOffset(), 0, 1, JSF_EL_PROPOSAL_IMAGE,
JstUIMessages.JspContentAssistProcessor_CloseELExpression,
+ null, JstUIMessages.JspContentAssistProcessor_CloseELExpressionInfo,
TextProposal.R_XML_ATTRIBUTE_VALUE_TEMPLATE);
- contentAssistRequest.addProposal(proposal);
- }
- } finally {
+ contentAssistRequest.addProposal(proposal);
}
}