Author: akazakov
Date: 2009-08-21 16:00:09 -0400 (Fri, 21 Aug 2009)
New Revision: 17226
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/JspContentAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/IPageContext.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/JspContextImpl.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/EnumerationProposalType.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/FaceletsJsfCProposalType.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/HTMLTagLibrary.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-4776
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-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/FaceletPageContectAssistProcessor.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -10,6 +10,7 @@
******************************************************************************/
package org.jboss.tools.jst.jsp.contentassist;
+import java.util.List;
import java.util.Map;
import org.eclipse.jface.text.IRegion;
@@ -80,9 +81,12 @@
.getExistingModelForRead(getDocument());
if (superContext != null) {
IRegion region = new Region (0, getDocument().getLength());
- Map<String, INameSpace> nameSpaces = superContext.getNameSpaces(getOffset());
- for (String prefix : nameSpaces.keySet()) {
- context.addNameSpace(region, nameSpaces.get(prefix));
+ Map<String, List<INameSpace>> nameSpaces =
superContext.getNameSpaces(getOffset());
+ for (String uri : nameSpaces.keySet()) {
+ List<INameSpace> ns = nameSpaces.get(uri);
+ for (INameSpace n : ns) {
+ context.addNameSpace(region, n);
+ }
}
}
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-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -139,7 +139,7 @@
* @return
*/
public ITagLibrary[] getTagLibraries(IPageContext context) {
- Map<String, INameSpace> nameSpaces = context.getNameSpaces(getOffset());
+ Map<String, List<INameSpace>> nameSpaces =
context.getNameSpaces(getOffset());
if (nameSpaces == null || nameSpaces.isEmpty())
return EMPTY_LIBRARIES;
@@ -148,11 +148,13 @@
return EMPTY_LIBRARIES;
List<ITagLibrary> tagLibraries = new ArrayList<ITagLibrary>();
- for (INameSpace nameSpace : nameSpaces.values()) {
- ITagLibrary[] libs = TagLibriryManager.getLibraries(project, nameSpace.getURI());
- if (libs != null && libs.length > 0) {
- for (ITagLibrary lib : libs) {
- tagLibraries.add(lib);
+ for (List<INameSpace> nameSpace : nameSpaces.values()) {
+ for (INameSpace n : nameSpace) {
+ ITagLibrary[] libs = TagLibriryManager.getLibraries(project, n.getURI());
+ if (libs != null && libs.length > 0) {
+ for (ITagLibrary lib : libs) {
+ tagLibraries.add(lib);
+ }
}
}
}
@@ -210,7 +212,7 @@
if (name.indexOf(':') == -1) return;
String prefix = name.substring(0, name.indexOf(':'));
- Map<String, INameSpace> ns = context.getNameSpaces(node.getStartOffset());
+ Map<String, List<INameSpace>> ns =
context.getNameSpaces(node.getStartOffset());
if (!containsPrefix(ns, prefix)) return;
NamedNodeMap attributes = node.getAttributes();
@@ -222,15 +224,15 @@
list.add(new ResourceBundle(basename, var));
}
- private boolean containsPrefix(Map<String, INameSpace> ns, String prefix) {
- for (INameSpace n: ns.values()) {
- if(prefix.equals(n.getPrefix())) return true;
+ private boolean containsPrefix(Map<String, List<INameSpace>> ns, String
prefix) {
+ for (List<INameSpace> n: ns.values()) {
+ for (INameSpace nameSpace : n) {
+ if(prefix.equals(nameSpace.getPrefix())) return true;
+ }
}
return false;
}
-
-
/**
* Returns the
<code>org.jboss.tools.common.el.core.resolver.ELContext</code> instance
*
@@ -254,13 +256,15 @@
if (prefix == null || prefix.length() == 0)
return null;
- Map<String, INameSpace> nameSpaces = getContext().getNameSpaces(getOffset());
+ Map<String, List<INameSpace>> nameSpaces =
getContext().getNameSpaces(getOffset());
if (nameSpaces == null || nameSpaces.isEmpty())
return null;
- for (INameSpace nameSpace : nameSpaces.values()) {
- if (prefix.equals(nameSpace.getPrefix())) {
- return nameSpace.getURI();
+ for (List<INameSpace> nameSpace : nameSpaces.values()) {
+ for (INameSpace n : nameSpace) {
+ if (prefix.equals(n.getPrefix())) {
+ return n.getURI();
+ }
}
}
return null;
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -770,8 +770,8 @@
ValueHelper valueHelper = new ValueHelper();
processor = valueHelper.createContentAssistProcessor();
pageContext = valueHelper.createPageContext(processor, query.getOffset());
- Map<String,INameSpace> ns = pageContext.getNameSpaces(query.getOffset());
- INameSpace n = ns.get(query.getUri());
+ Map<String, List<INameSpace>> ns =
pageContext.getNameSpaces(query.getOffset());
+ List<INameSpace> n = ns.get(query.getUri());
if(n == null && pageContext instanceof JspContextImpl) {
IRegion r = new Region(query.getOffset(), 0);
((JspContextImpl)pageContext).addNameSpace(r, new NameSpace(query.getUri(),
query.getPrefix()));
@@ -796,7 +796,7 @@
if(prefix == null || prefix.length() == 0) return c.getName();
return prefix + ":" + c.getName(); //$NON-NLS-1$
}
-
+
public boolean canHaveBody() {
IComponent c = findComponent(query);
return c != null && c.canHaveBody();
@@ -837,9 +837,9 @@
}
public String getPrefix(KbQuery query) {
- Map<String,INameSpace> ns = pageContext.getNameSpaces(query.getOffset());
- INameSpace n = ns.get(query.getUri());
- return n == null ? null : n.getPrefix();
+ Map<String,List<INameSpace>> ns =
pageContext.getNameSpaces(query.getOffset());
+ List<INameSpace> n = ns.get(query.getUri());
+ return n == null || n.isEmpty() ? null : n.get(0).getPrefix();
}
public TagAttributesComposite.AttributeDescriptorValue[] createDescriptors(KbQuery
query) {
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/IPageContext.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/IPageContext.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/IPageContext.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -10,6 +10,7 @@
******************************************************************************/
package org.jboss.tools.jst.web.kb;
+import java.util.List;
import java.util.Map;
import org.eclipse.jface.text.IDocument;
@@ -54,5 +55,5 @@
* Key is URI of name space.
* @return
*/
- Map<String, INameSpace> getNameSpaces(int offset);
+ Map<String, List<INameSpace>> getNameSpaces(int offset);
}
\ No newline at end of file
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/JspContextImpl.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/JspContextImpl.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/JspContextImpl.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -10,7 +10,9 @@
******************************************************************************/
package org.jboss.tools.jst.web.kb.internal;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -78,10 +80,10 @@
/* (non-Javadoc)
* @see org.jboss.tools.jst.web.kb.IPageContext#getNameSpaces(int)
*/
- public Map<String, INameSpace> getNameSpaces(int offset) {
- Map<String, INameSpace> result = new HashMap<String, INameSpace>();
+ public Map<String, List<INameSpace>> getNameSpaces(int offset) {
+ Map<String, List<INameSpace>> result = new HashMap<String,
List<INameSpace>>();
Map<INameSpace, IRegion> namespaceToRegions = new HashMap<INameSpace,
IRegion>();
-
+
for (IRegion region : nameSpaces.keySet()) {
if(offset>=region.getOffset() && offset<=region.getOffset() +
region.getLength()) {
Map<String, INameSpace> namespaces = nameSpaces.get(region);
@@ -105,12 +107,17 @@
}
for (INameSpace ns : namespaceToRegions.keySet()) {
- result.put(ns.getURI(), ns);
+ List<INameSpace> list = result.get(ns.getURI());
+ if(list==null) {
+ list = new ArrayList<INameSpace>();
+ }
+ list.add(ns);
+ result.put(ns.getURI(), list);
}
-
+
return result;
}
-
+
private INameSpace findNameSpaceByPrefix(Set<INameSpace> namespaces, String
prefix) {
if (namespaces != null && prefix != null) {
for (INameSpace ns : namespaces) {
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -102,27 +102,82 @@
* @see
org.jboss.tools.jst.web.kb.taglib.ITagLibrary#getComponents(org.jboss.tools.jst.web.kb.KbQuery,
org.jboss.tools.jst.web.kb.PageContext)
*/
public IComponent[] getComponents(KbQuery query, IPageContext context) {
- String prefix = getPrefix(query, context);
- return getComponents(query, prefix, context);
+ List<String> prefixes = getPrefixes(query, context);
+ return getComponentsByPrefixes(query, prefixes, context);
}
- protected String getPrefix(KbQuery query, IPageContext context) {
- String prefix = null;
- Map<String, INameSpace> nameSpaces = context.getNameSpaces(query.getOffset());
+ protected List<String> getPrefixes(KbQuery query, IPageContext context) {
+ List<String> prefixes = new ArrayList<String>();
+ Map<String, List<INameSpace>> nameSpaces =
context.getNameSpaces(query.getOffset());
if(nameSpaces!=null) {
- INameSpace nameSpace = nameSpaces.get(getURI());
+ List<INameSpace> nameSpace = nameSpaces.get(getURI());
if(nameSpace!=null) {
- prefix = nameSpace.getPrefix();
- if(prefix!=null && prefix.length()==0) {
- prefix = null;
+ for (INameSpace n : nameSpace) {
+ String sPrefix = n.getPrefix();
+ if(sPrefix!=null && sPrefix.length()>0) {
+ String fullTagName = null;
+ boolean mask = false;
+ if(query.getType()==KbQuery.Type.TAG_NAME || query.getType()==KbQuery.Type.TEXT) {
+ fullTagName = query.getValue();
+ mask = query.isMask();
+ } else {
+ fullTagName = query.getLastParentTag();
+ }
+ if(fullTagName == null) {
+ prefixes.add(sPrefix);
+ continue;
+ }
+ String tagName = fullTagName;
+ int prefixIndex = fullTagName.indexOf(':');
+ String queryPrefix = null;
+ if(prefixIndex>-1) {
+ queryPrefix = fullTagName.substring(0, prefixIndex);
+ if(prefixIndex<fullTagName.length()-1) {
+ tagName = fullTagName.substring(prefixIndex+1);
+ } else {
+ tagName = null;
+ }
+ }
+ if(mask && prefixIndex<0) {
+ if(ignoreCase) {
+ if(sPrefix.toLowerCase().startsWith(tagName.toLowerCase())) {
+ prefixes.add(sPrefix);
+ }
+ } else if(sPrefix.startsWith(tagName)) {
+ prefixes.add(sPrefix);
+ }
+ } else if(sPrefix.equals(queryPrefix)) {
+ prefixes.add(sPrefix);
+ }
+ }
}
}
}
- return prefix;
+ return prefixes;
}
private static final IComponent[] EMPTY_ARRAY = new IComponent[0];
+ protected IComponent[] getComponentsByPrefixes(KbQuery query, List<String>
prefixes, IPageContext context) {
+ if(prefixes==null) {
+ return getComponents(query, null, context);
+ }
+ if(prefixes.size()==0) {
+ return EMPTY_ARRAY;
+ }
+ if(prefixes.size()==1) {
+ return getComponents(query, prefixes.get(0), context);
+ }
+ List<IComponent> components = new ArrayList<IComponent>();
+ for (String prefix : prefixes) {
+ IComponent[] cps = getComponents(query, prefix, context);
+ for (IComponent c : cps) {
+ components.add(c);
+ }
+ }
+ return components.toArray(new IComponent[0]);
+ }
+
protected IComponent[] getComponents(KbQuery query, String prefix, IPageContext context)
{
String fullTagName = null;
boolean mask = false;
@@ -334,13 +389,19 @@
* @see
org.jboss.tools.jst.web.kb.ProposalProcessor#getProposals(org.jboss.tools.jst.web.kb.KbQuery,
org.jboss.tools.jst.web.kb.PageContext)
*/
public TextProposal[] getProposals(KbQuery query, IPageContext context) {
- String prefix = getPrefix(query, context);
+ List<String> prefixes = getPrefixes(query, context);
List<TextProposal> proposals = new ArrayList<TextProposal>();
- IComponent[] components = getComponents(query, prefix, context);
+ IComponent[] components = getComponentsByPrefixes(query, prefixes, context);
if(query.getType() == KbQuery.Type.TAG_NAME || query.getType() == KbQuery.Type.TEXT) {
for (int i = 0; i < components.length; i++) {
if(!(components[i] instanceof CustomComponentExtension)) {
- proposals.add(getProposal(prefix, components[i]));
+ if(prefixes==null) {
+ proposals.add(getProposal(null, components[i]));
+ } else {
+ for (String prefix : prefixes) {
+ proposals.add(getProposal(prefix, components[i]));
+ }
+ }
}
}
} else {
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/EnumerationProposalType.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/EnumerationProposalType.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/EnumerationProposalType.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -39,7 +39,7 @@
List<TextProposal> proposals = new ArrayList<TextProposal>();
for (int i = 0; i < params.length; i++) {
String text = params[i].getValue();
- if(text.startsWith(query.getValue())) {
+ if(text.startsWith(query.getValue())) {
TextProposal proposal = new TextProposal();
proposal.setLabel(text);
proposal.setReplacementString(text);
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/FaceletsJsfCProposalType.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/FaceletsJsfCProposalType.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/FaceletsJsfCProposalType.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -56,19 +56,21 @@
return EMPTY_PROPOSAL_LIST;
}
proposals = new ArrayList<TextProposal>();
- Map<String, String> prefixes = new HashMap<String, String>();
+ Map<String, List<String>> prefixes = new HashMap<String,
List<String>>();
for (int i = 0; i < components.length; i++) {
ITagLibrary lib = components[i].getTagLib();
if(ignoreTagLib(lib)) {
continue;
}
- String prefix = prefixes.get(lib.getURI());
- if(prefix==null) {
- prefix = getPrefix(context, components[i], kbQuery);
- prefixes.put(lib.getURI(), prefix);
+ List<String> pfx = prefixes.get(lib.getURI());
+ if(pfx==null) {
+ pfx = getPrefixes(context, components[i], kbQuery);
+ prefixes.put(lib.getURI(), pfx);
}
- TextProposal proposal = getProposal(prefix, components[i]);
- proposals.add(proposal);
+ for (String prefix : pfx) {
+ TextProposal proposal = getProposal(prefix, components[i]);
+ proposals.add(proposal);
+ }
}
return proposals.toArray(new TextProposal[0]);
}
@@ -91,16 +93,18 @@
return proposal;
}
- private String getPrefix(IPageContext context, IComponent component, KbQuery query) {
- String prefix = null;
- Map<String, INameSpace> nameSpaces = context.getNameSpaces(query.getOffset());
+ private List<String> getPrefixes(IPageContext context, IComponent component,
KbQuery query) {
+ List<String> prefixes = new ArrayList<String>();
+ Map<String, List<INameSpace>> nameSpaces =
context.getNameSpaces(query.getOffset());
if(nameSpaces!=null) {
- INameSpace nameSpace = nameSpaces.get(component.getTagLib().getURI());
+ List<INameSpace> nameSpace = nameSpaces.get(component.getTagLib().getURI());
if(nameSpace!=null) {
- prefix = nameSpace.getPrefix();
+ for (INameSpace n : nameSpace) {
+ prefixes.add(n.getPrefix());
+ }
}
}
- return prefix;
+ return prefixes;
}
/* (non-Javadoc)
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/HTMLTagLibrary.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/HTMLTagLibrary.java 2009-08-21
16:05:00 UTC (rev 17225)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/HTMLTagLibrary.java 2009-08-21
20:00:09 UTC (rev 17226)
@@ -67,6 +67,15 @@
/*
* (non-Javadoc)
+ * @see
org.jboss.tools.jst.web.kb.internal.taglib.AbstractTagLib#getPrefixes(org.jboss.tools.jst.web.kb.KbQuery,
org.jboss.tools.jst.web.kb.IPageContext)
+ */
+ @Override
+ protected List<String> getPrefixes(KbQuery query, IPageContext context) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
* @see
org.jboss.tools.jst.web.kb.internal.taglib.CustomTagLibrary#parseComponent(org.w3c.dom.Element)
*/
@Override