[jbosstools-commits] JBoss Tools SVN: r31119 - trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu May 5 22:01:12 EDT 2011


Author: scabanovich
Date: 2011-05-05 22:01:11 -0400 (Thu, 05 May 2011)
New Revision: 31119

Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/SeamConfigXmlCompletionProposalComputer.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/TagData.java
Log:
JBIDE-8842
https://issues.jboss.org/browse/JBIDE-8842

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/SeamConfigXmlCompletionProposalComputer.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/SeamConfigXmlCompletionProposalComputer.java	2011-05-06 01:24:53 UTC (rev 31118)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/SeamConfigXmlCompletionProposalComputer.java	2011-05-06 02:01:11 UTC (rev 31119)
@@ -40,18 +40,24 @@
 import org.eclipse.wst.xml.ui.internal.editor.XMLEditorPluginImages;
 import org.jboss.tools.cdi.core.CDICoreNature;
 import org.jboss.tools.cdi.core.CDICorePlugin;
-import org.jboss.tools.cdi.core.ICDIProject;
 import org.jboss.tools.cdi.seam.config.core.CDISeamConfigConstants;
 import org.jboss.tools.cdi.seam.config.core.CDISeamConfigExtension;
 import org.jboss.tools.cdi.seam.config.core.util.Util;
 import org.jboss.tools.cdi.seam.config.core.xml.SAXElement;
 import org.jboss.tools.cdi.seam.config.ui.CDISeamConfigUIPlugin;
 import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.xml.XMLUtilities;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
-public class SeamConfigXmlCompletionProposalComputer extends AbstractXMLModelQueryCompletionProposalComputer {
+public class SeamConfigXmlCompletionProposalComputer extends AbstractXMLModelQueryCompletionProposalComputer implements CDISeamConfigConstants {
+	static int RELEVANCE_TAG = XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME;
+	static int RELEVANCE_TAG_KEYWORD = RELEVANCE_TAG - 1;
+	static int RELEVANCE_TAG_ANNOTATION = RELEVANCE_TAG_KEYWORD - 1;
+	static int RELEVANCE_TAG_MEMBER = RELEVANCE_TAG_ANNOTATION - 1;
+	static int RELEVANCE_TAG_TYPE = RELEVANCE_TAG_MEMBER - 1;
+
 	CompletionProposalInvocationContext context;
 	Node currentNode;
 	SAXElement sax;
@@ -159,8 +165,8 @@
 			if(Util.isEntry(sax)) {
 				//Inside entry - only <key> and <value>
 				if(eePrefix != null) {
-					addTagData(tagData, eePrefix, CDISeamConfigConstants.KEYWORD_KEY, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
-					addTagData(tagData, eePrefix, CDISeamConfigConstants.KEYWORD_VALUE, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
+					addTagData(tagData, eePrefix, KEYWORD_KEY, true, RELEVANCE_TAG_KEYWORD);
+					addTagData(tagData, eePrefix, KEYWORD_VALUE, true, RELEVANCE_TAG_KEYWORD);
 				}
 			} else if(Util.isValue(sax) || Util.isKey(sax)) {
 				//Inside value or key we can define new bean.
@@ -170,30 +176,27 @@
 			} else if((contextType = Util.resolveType(sax, cdi)) != null) {
 				//We are inside bean. Suggest members and annotations.
 				addTypeNames(tagData, true); //only annotations allowed here.
-				addTagData(tagData, getTagNamesForMembers(parentElementPrefix, contextType), XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 2);
+				addTagData(tagData, getTagNamesForMembers(parentElementPrefix, contextType), RELEVANCE_TAG_MEMBER);
 
 				if(eePrefix != null) {
-					TagData d = new TagData(eePrefix + ":" + CDISeamConfigConstants.KEYWORD_MODIFIES, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
-					d.hasClosingTag = false;
-					tagData.add(d);
-					d = new TagData(eePrefix + ":" + CDISeamConfigConstants.KEYWORD_REPLACES, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
-					tagData.add(d);
+					addTagData(tagData, eePrefix, KEYWORD_MODIFIES, false, true, RELEVANCE_TAG_KEYWORD);
+					addTagData(tagData, eePrefix, KEYWORD_REPLACES, false, true, RELEVANCE_TAG_KEYWORD);
 				}
 			} else if(sax.getParent() != null && ((contextType = Util.resolveType(sax.getParent(), cdi)) != null)) {
 				IMember member = null;
 				try {
 					member = Util.resolveMember(contextType, sax);
 				} catch (JavaModelException e) {
-					CDISeamConfigUIPlugin.getDefault().log(e);
+					CDISeamConfigUIPlugin.log(e);
 				}
 				if(member != null) {
 					//We are inside bean member. Suggest annotations and <value>.
 					addTypeNames(tagData, true); //only annotations allowed here.
 					if(eePrefix != null) {
 						if(member instanceof IField) {
-							addTagData(tagData, eePrefix, CDISeamConfigConstants.KEYWORD_VALUE, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
+							addTagData(tagData, eePrefix, KEYWORD_VALUE, true, RELEVANCE_TAG_KEYWORD);
 						} else if(member instanceof IMethod) {
-							addTagData(tagData, eePrefix, CDISeamConfigConstants.KEYWORD_PARAMETERS, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 1);
+							addTagData(tagData, eePrefix, KEYWORD_PARAMETERS, true, true, RELEVANCE_TAG_KEYWORD);
 						}
 					}
 
@@ -204,6 +207,9 @@
 		int begin = contentAssistRequest.getReplacementBeginPosition();;
 		int length = contentAssistRequest.getReplacementLength();
 		for (TagData tag: tagData) {
+			if(tag.isUnique) {
+				if(XMLUtilities.getUniqueChild((Element)parentElement, tag.getName()) != null) continue;
+			}
 			String tagText = tag.getText();
 			String proposedInfo = null;
 			CustomCompletionProposal textProposal = new CustomCompletionProposal(
@@ -217,16 +223,20 @@
 	private void addTypeNames(Set<TagData> tagData, boolean annotationsOnly) {
 		try {
 			Set<String> tagNames = getAllTagNames(annotationsOnly);
-			addTagData(tagData, tagNames, XMLRelevanceConstants.R_STRICTLY_VALID_TAG_NAME - 3);
+			addTagData(tagData, tagNames, annotationsOnly ? RELEVANCE_TAG_ANNOTATION : RELEVANCE_TAG_TYPE);
 		} catch (JavaModelException e) {
-			CDISeamConfigUIPlugin.getDefault().log(e);
+			CDISeamConfigUIPlugin.log(e);
 		}
 	}
 
-	private void addTagData(Set<TagData> tagData, String prefix, String name, int relevance) {
-		tagData.add(new TagData(prefix + ":" + name, relevance));
+	private void addTagData(Set<TagData> tagData, String prefix, String name, boolean hasClosingTag, int relevance) {
+		tagData.add(new TagData(prefix, name, hasClosingTag, false, relevance));
 	}
 
+	private void addTagData(Set<TagData> tagData, String prefix, String name, boolean hasClosingTag, boolean isUnique, int relevance) {
+		tagData.add(new TagData(prefix, name, hasClosingTag, isUnique, relevance));
+	}
+
 	private void addTagData(Set<TagData> tagData, Set<String> tagNames, int relevance) {
 		for (String tagName: tagNames) {
 			tagData.add(new TagData(tagName, relevance));
@@ -280,7 +290,7 @@
 					}
 				}
 			}
-			eePrefix = prefixByPackage.get(CDISeamConfigConstants.PACKAGE_EE);
+			eePrefix = prefixByPackage.get(PACKAGE_EE);
 			node = node.getParentNode();
 		}
 	}
@@ -306,7 +316,7 @@
 
 	public static Set<String> findTypeNamesByPackage(IJavaProject javaProject, String packageName, boolean annotationsOnly) throws JavaModelException {
 		Set<String> result = new HashSet<String>();
-		if(CDISeamConfigConstants.PACKAGE_EE.equals(packageName)) {
+		if(PACKAGE_EE.equals(packageName)) {
 			result.addAll(Util.EE_TYPES.keySet());
 		} else if(javaProject != null) {
 			IPackageFragmentRoot[] rs = javaProject.getAllPackageFragmentRoots();
@@ -330,9 +340,7 @@
 	}
 
 	private static boolean accept(IType type, boolean annotationOnly) throws JavaModelException {
-		if(type == null) return false;
-		if(annotationOnly && !type.isAnnotation()) return false;
-		return true;
+		return (type != null) && (!annotationOnly || type.isAnnotation());
 	}
 
 	private Set<String> getTagNamesForMembers(String prefix, IType type) {
@@ -347,7 +355,7 @@
 				result.add(prefix + ":" + m.getElementName());
 			}
 		} catch (JavaModelException e) {
-			CDISeamConfigUIPlugin.getDefault().log(e);
+			CDISeamConfigUIPlugin.log(e);
 		}
 		return result;
 	}

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/TagData.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/TagData.java	2011-05-06 01:24:53 UTC (rev 31118)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.ui/src/org/jboss/tools/cdi/seam/config/ui/contentassist/TagData.java	2011-05-06 02:01:11 UTC (rev 31119)
@@ -3,6 +3,7 @@
 public class TagData {
 	String name;
 	boolean hasClosingTag = true;
+	boolean isUnique = false;
 	int relevance;
 	
 	public TagData(String name, int relevance) {
@@ -10,6 +11,13 @@
 		this.relevance = relevance;
 	}
 
+	public TagData(String prefix, String localName, boolean hasClosingTag, boolean isUnique, int relevance) {
+		this.name = prefix + ":" + localName;
+		this.hasClosingTag = hasClosingTag;
+		this.relevance = relevance;
+		this.isUnique = isUnique;
+	}
+
 	public String getText() {
 		return hasClosingTag ? "<" + name + "></" + name + ">" : "<" + name + "/>";
 	}
@@ -22,4 +30,16 @@
 		return relevance;
 	}
 
+	public void setHasClosingTag(boolean b) {
+		hasClosingTag = b;
+	}
+
+	public void setUnique(boolean b) {
+		isUnique = b;
+	}
+
+	public boolean isUnique() {
+		return isUnique;
+	}
+
 }



More information about the jbosstools-commits mailing list