Author: vrubezhny
Date: 2009-08-18 06:32:33 -0400 (Tue, 18 Aug 2009)
New Revision: 17126
Modified:
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/contentassist/SortingCompoundContentAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/FaceletPageContectAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java
Log:
JBIDE-4776: CA does not show proposals when it should
Issue is fixed
Modified:
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/contentassist/SortingCompoundContentAssistProcessor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/contentassist/SortingCompoundContentAssistProcessor.java 2009-08-18
10:20:30 UTC (rev 17125)
+++
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/contentassist/SortingCompoundContentAssistProcessor.java 2009-08-18
10:32:33 UTC (rev 17126)
@@ -15,7 +15,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -34,6 +33,7 @@
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager;
+import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceCompletionProposal;
import org.eclipse.wst.sse.ui.internal.util.Sorter;
@@ -260,49 +260,88 @@
* @return a list of unique completion suggestions.
*/
public ICompletionProposal[] makeUnique(ICompletionProposal[] proposals) {
- HashSet<String> present = new HashSet<String>();
- HashSet<String> info = new HashSet<String>();
- ArrayList<ICompletionProposal> unique= new
ArrayList<ICompletionProposal>();
+ ArrayList<ICompletionProposal> unique = new
ArrayList<ICompletionProposal>();
for (int i = 0; proposals != null && i < proposals.length; i++) {
if (proposals[i] == null)
continue;
- String infoUnquoted = proposals[i].getAdditionalProposalInfo();
- if (infoUnquoted != null) {
- if (infoUnquoted.startsWith("\"")) //$NON-NLS-1$
- infoUnquoted = infoUnquoted.substring(1);
- if (infoUnquoted.endsWith("\"")) //$NON-NLS-1$
- infoUnquoted = infoUnquoted.substring(0, infoUnquoted.length() - 1);
- infoUnquoted = infoUnquoted.trim().toLowerCase();
- }
- String displayStringUnquoted = (proposals[i].getDisplayString() == null ?
- "" : //$NON-NLS-1$
- proposals[i].getDisplayString().toLowerCase());
- if (displayStringUnquoted.startsWith("\"")) //$NON-NLS-1$
- displayStringUnquoted = displayStringUnquoted.substring(1);
- if (displayStringUnquoted.endsWith("\"")) //$NON-NLS-1$
- displayStringUnquoted = displayStringUnquoted.substring(0,
displayStringUnquoted.length() - 1);
- displayStringUnquoted = displayStringUnquoted.trim().toLowerCase();
-
- if (displayStringUnquoted != null && displayStringUnquoted.length() > 0
&& !present.contains(displayStringUnquoted)) {
- present.add(displayStringUnquoted);
- if (infoUnquoted != null && infoUnquoted.length() > 0) {
- if (!info.contains(infoUnquoted)) {
- info.add(infoUnquoted);
- } else {
- // Do not add proposals with the same info
- continue;
- }
- }
+ ICompletionProposal existingProposal = findExistingProposal(unique, proposals[i]);
+ if (existingProposal == null) {
unique.add(proposals[i]);
}
}
-
- present.clear();
return unique.toArray(new ICompletionProposal[unique.size()]);
}
+ private ICompletionProposal findExistingProposal(List<ICompletionProposal>
proposals, ICompletionProposal proposal) {
+ if (proposals == null || proposal == null)
+ return null;
+
+ for (ICompletionProposal existingProposal : proposals) {
+ String exReplString = null;
+ String exDispString = null;
+ String exInfoString = null;
+
+ if (existingProposal instanceof CustomCompletionProposal) {
+ exReplString = ((CustomCompletionProposal)existingProposal).getReplacementString();
+ }
+ exDispString = unQuote(existingProposal.getDisplayString());
+ exInfoString = unQuote(existingProposal.getAdditionalProposalInfo());
+ exReplString = getReplacementWord(exReplString == null ? exDispString :
exReplString);
+
+ String replString = null;
+ String dispString = null;
+ String infoString = null;
+
+ if (proposal instanceof CustomCompletionProposal) {
+ replString = ((CustomCompletionProposal)proposal).getReplacementString();
+ }
+ dispString = unQuote(proposal.getDisplayString());
+ infoString = unQuote(proposal.getAdditionalProposalInfo());
+ replString = getReplacementWord(replString == null ? dispString : replString);
+
+ if (exReplString != null && replString != null &&
+ (exReplString.equals(replString) ||
+ exReplString.startsWith(replString) ||
+ replString.startsWith(exReplString)))
+ return existingProposal;
+ }
+
+ return null;
+ }
+
+ private String getReplacementWord(String replacement) {
+ replacement = (replacement == null ?
+ "" : //$NON-NLS-1$
+ replacement);
+ int index = replacement.indexOf('>'); //$NON-NLS-1$
+ if (index != -1) {
+ replacement = replacement.substring(0, index).trim();
+ if (replacement.endsWith("/")) //$NON-NLS-1$
+ replacement = replacement.substring(0, replacement.length() - 1).trim();
+ }
+ index = replacement.indexOf('=');
+ if (index != -1) {
+ replacement = replacement.substring(0, index).trim();
+ }
+ return replacement;
+ }
+
+ private String unQuote(String str) {
+ str = (str == null ?
+ "" : //$NON-NLS-1$
+ str.toLowerCase());
+ if (str.startsWith("\"")) //$NON-NLS-1$
+ str = str.substring(1);
+ if (str.endsWith("\"")) //$NON-NLS-1$
+ str = str.substring(0, str.length() - 1);
+ str = str.trim().toLowerCase();
+
+ return str;
+ }
+
+
protected Sorter createSorter() {
return new Sorter() {
public boolean compare(Object proposal1, Object proposal2) {
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/FaceletPageContectAssistProcessor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/FaceletPageContectAssistProcessor.java 2009-08-18
10:20:30 UTC (rev 17125)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/FaceletPageContectAssistProcessor.java 2009-08-18
10:32:33 UTC (rev 17126)
@@ -31,6 +31,7 @@
import org.jboss.tools.jst.web.kb.PageProcessor;
import org.jboss.tools.jst.web.kb.KbQuery.Type;
import org.jboss.tools.jst.web.kb.internal.FaceletPageContextImpl;
+import org.jboss.tools.jst.web.kb.internal.taglib.NameSpace;
import org.jboss.tools.jst.web.kb.taglib.CustomTagLibManager;
import org.jboss.tools.jst.web.kb.taglib.INameSpace;
import org.w3c.dom.Attr;
@@ -135,24 +136,10 @@
}
Region region = new Region(start, length);
- INameSpace nameSpace = new INameSpace(){
- public String getURI() {
- return uri.trim();
- }
- public String getPrefix() {
- return prefix.trim();
- }
- };
+ INameSpace nameSpace = new NameSpace(uri.trim(), prefix.trim());
context.addNameSpace(region, nameSpace);
if (CustomTagLibManager.FACELETS_UI_TAG_LIB_URI.equals(uri)) {
- nameSpace = new INameSpace(){
- public String getURI() {
- return CustomTagLibManager.FACELETS_HTML_TAG_LIB_URI;
- }
- public String getPrefix() {
- return ""; //$NON-NLS-1$
- }
- };
+ nameSpace = new NameSpace(CustomTagLibManager.FACELETS_HTML_TAG_LIB_URI,
"");
context.addNameSpace(region, nameSpace);
}
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java 2009-08-18
10:20:30 UTC (rev 17125)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java 2009-08-18
10:32:33 UTC (rev 17126)
@@ -42,6 +42,7 @@
import org.jboss.tools.jst.web.kb.KbQuery.Type;
import org.jboss.tools.jst.web.kb.internal.JspContextImpl;
import org.jboss.tools.jst.web.kb.internal.ResourceBundle;
+import org.jboss.tools.jst.web.kb.internal.taglib.NameSpace;
import org.jboss.tools.jst.web.kb.taglib.INameSpace;
import org.jboss.tools.jst.web.kb.taglib.ITagLibrary;
import org.jboss.tools.jst.web.kb.taglib.TagLibriryManager;
@@ -113,16 +114,7 @@
uri != null && uri.trim().length() > 0) {
IRegion region = new Region(0, getDocument().getLength());
- INameSpace nameSpace = new INameSpace(){
-
- public String getURI() {
- return uri.trim();
- }
-
- public String getPrefix() {
- return prefix.trim();
- }
- };
+ INameSpace nameSpace = new NameSpace(uri.trim(), prefix.trim());
context.addNameSpace(region, nameSpace);
}
}
@@ -481,7 +473,9 @@
int replacementLength = contentAssistRequest.getReplacementLength();
int cursorPosition = getCursorPositionForProposedText(replacementString);
Image image = textProposal.getImage();
- String displayString = textProposal.getLabel();
+ String displayString = textProposal.getLabel() == null ?
+ replacementString :
+ textProposal.getLabel();
IContextInformation contextInformation = null;
String additionalProposalInfo = textProposal.getContextInfo();
int relevance = textProposal.getRelevance();
@@ -531,7 +525,9 @@
}
int cursorPosition = getCursorPositionForProposedText(replacementString);
Image image = textProposal.getImage();
- String displayString = textProposal.getLabel();
+ String displayString = textProposal.getLabel() == null ?
+ replacementString :
+ textProposal.getLabel();
IContextInformation contextInformation = null;
String additionalProposalInfo = textProposal.getContextInfo();
int relevance = textProposal.getRelevance();
Show replies by date