[jbosstools-commits] JBoss Tools SVN: r30857 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core: src/org/jboss/tools/cdi/seam/config/core and 3 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Apr 26 19:11:51 EDT 2011


Author: scabanovich
Date: 2011-04-26 19:11:51 -0400 (Tue, 26 Apr 2011)
New Revision: 30857

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamParameterDefinition.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/META-INF/MANIFEST.MF
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/CDISeamConfigConstants.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/ConfigDefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMemberDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMethodDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SAXElement.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java
Log:
JBIDE-3120
https://issues.jboss.org/browse/JBIDE-3120

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/META-INF/MANIFEST.MF
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/META-INF/MANIFEST.MF	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/META-INF/MANIFEST.MF	2011-04-26 23:11:51 UTC (rev 30857)
@@ -28,5 +28,8 @@
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: JBoss by Red Hat
-Export-Package: org.jboss.tools.cdi.seam.config.core
+Export-Package: org.jboss.tools.cdi.seam.config.core,
+ org.jboss.tools.cdi.seam.config.core.definition,
+ org.jboss.tools.cdi.seam.config.core.scanner,
+ org.jboss.tools.cdi.seam.config.core.util
 

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/CDISeamConfigConstants.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/CDISeamConfigConstants.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/CDISeamConfigConstants.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -14,14 +14,34 @@
 
 public interface CDISeamConfigConstants extends CDIConstants {
 
-	public static String SEAM_BEANS_XML = "seam-beans.xml";
+	public String SEAM_BEANS_XML = "seam-beans.xml";
 
-	public static String URI_PREFIX = "urn:java:";
+	public String URI_PREFIX = "urn:java:";
 
 	//Problem id: node name was not resolved to Java type
-	public static String UNRESOLVED_TYPE = "Unresolved type";
+	public String ERROR_UNRESOLVED_TYPE = "Unresolved type";
 
 	//Problem id: node was expected to be resolved to annotation type
-	public static String ANNOTATION_EXPECTED = "Annotation expected";
+	public String ERROR_ANNOTATION_EXPECTED = "Annotation expected";
 
+	public String PACKAGE_EE = "ee";
+
+	public String KEYWORD_ARRAY = "array";
+
+	public String KEYWORD_ENTRY = "entry";
+	public String KEYWORD_E = "e";
+
+	public String KEYWORD_KEY = "key";
+	public String KEYWORD_K = "k";
+
+	public String KEYWORD_VALUE = "value";
+	public String KEYWORD_V = "v";
+
+	public String KEYWORD_REPLACES = "replaces";
+
+	public String KEYWORD_MODIFIES = "modifies";
+	
+	public String KEYWORD_PARAMETERS = "parameters";
+
+	public String ATTR_DIMENSIONS = "dimensions";
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/ConfigDefinitionContext.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/ConfigDefinitionContext.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/ConfigDefinitionContext.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -119,6 +119,12 @@
 		return result;
 	}
 
+	public SeamBeansDefinition getDefinition(IPath path) {
+		if(beanXMLs.containsKey(path)) return beanXMLs.get(path);
+		if(seambeanXMLs.containsKey(path)) return seambeanXMLs.get(path);
+		return null;
+	}
+
 	public void addAnnotation(String typeName, AnnotationDefinition def) {
 		IPath path = def.getResource().getFullPath();
 //		root.clean(typeName);

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -42,4 +42,8 @@
 		beanDefinitions.add(def);
 	}
 
+	public Set<SeamBeanDefinition> getBeanDefinitions() {
+		return beanDefinitions;
+	}
+
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMemberDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMemberDefinition.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMemberDefinition.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -15,6 +15,7 @@
 
 import org.jboss.tools.cdi.core.IJavaAnnotation;
 import org.jboss.tools.cdi.seam.config.core.scanner.SAXElement;
+import org.jboss.tools.common.text.ITextSourceReference;
 
 /**
  * 
@@ -23,9 +24,9 @@
  */
 public abstract class SeamMemberDefinition {
 	protected SAXElement element;
-	SAXElement replaces = null;
-	SAXElement modifies = null;
-	Map<String, IJavaAnnotation> annotations = new HashMap<String, IJavaAnnotation>();
+	protected SAXElement replaces = null;
+	protected SAXElement modifies = null;
+	protected Map<String, IJavaAnnotation> annotations = new HashMap<String, IJavaAnnotation>();
 	
 	public SeamMemberDefinition() {}
 
@@ -33,6 +34,10 @@
 		this.element = element;
 	}
 
+	public SAXElement getElement() {
+		return element;
+	}
+
 	public void setReplaces(SAXElement replaces) {
 		this.replaces = replaces;
 	}
@@ -44,4 +49,16 @@
 	public void addAnnotation(IJavaAnnotation a) {
 		annotations.put(a.getTypeName(), a);
 	}
+
+	public IJavaAnnotation getAnnotation(String typeName) {
+		return annotations.get(typeName);
+	}
+
+	public ITextSourceReference getReplacesLocation() {
+		return replaces == null ? null : replaces.getLocation();
+	}
+
+	public ITextSourceReference getModifiesLocation() {
+		return modifies == null ? null : modifies.getLocation();
+	}
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMethodDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMethodDefinition.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamMethodDefinition.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -10,6 +10,9 @@
  ******************************************************************************/
 package org.jboss.tools.cdi.seam.config.core.definition;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.jdt.core.IMethod;
 
 /**
@@ -19,6 +22,7 @@
  */
 public class SeamMethodDefinition extends SeamMemberDefinition {
 	IMethod method;
+	List<SeamParameterDefinition> parameters = new ArrayList<SeamParameterDefinition>();
 
 	public SeamMethodDefinition() {}
 
@@ -26,4 +30,8 @@
 		this.method = method;
 	}
 
+	public void addParameter(SeamParameterDefinition p) {
+		parameters.add(p);
+	}
+
 }

Added: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamParameterDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamParameterDefinition.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamParameterDefinition.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -0,0 +1,41 @@
+/******************************************************************************* 
+ * Copyright (c) 2011 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is 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: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.config.core.definition;
+
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.IType;
+
+/**
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class SeamParameterDefinition extends SeamMemberDefinition {
+	IType type;
+	String dimentions;
+
+	ILocalVariable parameter;
+
+	public SeamParameterDefinition() {}
+
+	public void setType(IType type) {
+		this.type = type;
+	}
+
+	public void setDimensions(String value) {
+		dimentions = value;
+	}
+
+	public void setParameter(ILocalVariable parameter) {
+		this.parameter = parameter;
+	}
+
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamParameterDefinition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SAXElement.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SAXElement.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SAXElement.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -14,6 +14,7 @@
 import java.util.List;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.jboss.tools.common.text.ITextSourceReference;
 
@@ -88,6 +89,10 @@
 		return attributes.get(name);
 	}
 
+	public Set<String> getAttributeNames() {
+		return attributes.keySet();
+	}
+
 	public void addChildElement(SAXElement child) {
 		child.setParent(this);
 		children.add(child);

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -2,10 +2,12 @@
 
 import java.io.ByteArrayInputStream;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
@@ -21,6 +23,7 @@
 import org.jboss.tools.cdi.seam.config.core.definition.SeamBeansDefinition;
 import org.jboss.tools.cdi.seam.config.core.definition.SeamFieldDefinition;
 import org.jboss.tools.cdi.seam.config.core.definition.SeamMethodDefinition;
+import org.jboss.tools.cdi.seam.config.core.definition.SeamParameterDefinition;
 import org.jboss.tools.cdi.seam.config.core.util.Util;
 
 public class SeamDefinitionBuilder {
@@ -62,18 +65,12 @@
 
 		IType type = Util.resolveType(element, project);
 		if(type == null) {
-			result.addUnresolvedNode(element, CDISeamConfigConstants.UNRESOLVED_TYPE);
+			result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_UNRESOLVED_TYPE);
 			return;
 		}
-		boolean isAnnnotation = false;
-		try {
-			isAnnnotation = type.isAnnotation();
-		} catch (JavaModelException e) {
-			CDISeamConfigCorePlugin.getDefault().logError(e);
-			result.addUnresolvedNode(element, CDISeamConfigConstants.UNRESOLVED_TYPE);
-			return;
-		}
-		if(isAnnnotation) {
+		TypeCheck typeCheck = new TypeCheck(type, element);
+		if(typeCheck.isCorrupted) return;
+		if(typeCheck.isAnnotation) {
 			scanAnnotation(element, type);
 		} else {
 			scanBean(element, type);
@@ -89,9 +86,7 @@
 		//children should be annotation declarations.
 		for (SAXElement c: es) {
 			IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
-			if(a != null) {
-				def.addAnnotation(a, context.getRootContext());
-			}
+			if(a != null) def.addAnnotation(a, context.getRootContext());
 		}
 		
 		def.revalidateKind(context.getRootContext());
@@ -108,26 +103,24 @@
 		List<SAXElement> es = element.getChildElements();
 		for (SAXElement c: es) {
 			if(!Util.isConfigRelevant(c)) continue;
-			if(Util.containsEEPackage(c.getURI())) {
-				if("replaces".equals(c.getLocalName())) {
+			if(Util.containsEEPackage(c)) {
+				if(CDISeamConfigConstants.KEYWORD_REPLACES.equals(c.getLocalName())) {
 					def.setReplaces(c);
 					continue;
 				}
-				if("modifies".equals(c.getLocalName())) {
+				if(CDISeamConfigConstants.KEYWORD_MODIFIES.equals(c.getLocalName())) {
 					def.setModifies(c);
 					continue;
 				}
 			}
 			IType t = Util.resolveType(c, project);
 			if(t != null) {
-				IJavaAnnotation a = loadAnnotationDeclaration(element, IN_ANNOTATION_TYPE);
-				if(a != null) {
-					def.addAnnotation(a);
-				}
+				IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
+				if(a != null) def.addAnnotation(a);
 				continue;
 			}
 			IMember m = null;
-			try {
+			if(c.getURI() != null && c.getURI().equals(element.getURI())) try {
 				m = Util.resolveMember(type, c);
 			} catch (JavaModelException e) {
 				CDISeamConfigCorePlugin.getDefault().logError(e);
@@ -149,19 +142,18 @@
 		List<SAXElement> es = element.getChildElements();
 		for (SAXElement c: es) {
 			if(!Util.isConfigRelevant(c)) continue;
-			if(Util.containsEEPackage(c.getURI())) {
-				if("value".equals(c.getLocalName())) {
-					//TODO do not forget to look for Inline Bean Declarations inside field values.
-					
+			if(Util.containsEEPackage(c)) {
+				if(Util.isValue(c)) {
+					scanFieldValue(c);
+				} else if(Util.isEntry(c)) {
+					scanEntry(c);
 				}
-				
+				continue;
 			}
 			IType t = Util.resolveType(c, project);
 			if(t != null) {
-				IJavaAnnotation a = loadAnnotationDeclaration(element, IN_ANNOTATION_TYPE);
-				if(a != null) {
-					def.addAnnotation(a);
-				}
+				IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
+				if(a != null) def.addAnnotation(a);
 				continue;
 			}
 		
@@ -169,6 +161,35 @@
 		return def;
 	}	
 
+	/**
+	 * Scan field value for inline bean declarations. 
+	 * @param element
+	 */
+	private void scanFieldValue(SAXElement element) {
+		if(!Util.isConfigRelevant(element)) return;
+		List<SAXElement> es = element.getChildElements();
+		for (SAXElement c: es) {
+			if(!Util.isConfigRelevant(c)) continue;
+			IType type = Util.resolveType(element, project);
+			if(type == null) continue;
+			TypeCheck typeCheck = new TypeCheck(type, element);
+			if(typeCheck.isCorrupted) return;
+			if(!typeCheck.isAnnotation) {
+				scanBean(element, type);
+			}
+		}
+	}
+
+	private void scanEntry(SAXElement element) {
+		List<SAXElement> es = element.getChildElements();
+		for (SAXElement c: es) {
+			if(!Util.isConfigRelevant(c)) continue;
+			if(Util.isKey(c) || Util.isValue(c)) {
+				scanFieldValue(c);
+			}
+		}
+	}
+
 	private SeamMethodDefinition scanMethod(SAXElement element, IMethod method) {
 		SeamMethodDefinition def = new SeamMethodDefinition();
 		def.setElement(element);
@@ -176,19 +197,22 @@
 		List<SAXElement> es = element.getChildElements();
 		for (SAXElement c: es) {
 			if(!Util.isConfigRelevant(c)) continue;
-			if(Util.containsEEPackage(c.getURI())) {
-				if("parameters".equals(c.getLocalName())) {
-					//TODO
-					
-				}
-				
+			if(Util.containsEEPackage(c)) {
+				if(Util.isParameters(c)) {
+					List<SAXElement> ps = element.getChildElements();
+					for (SAXElement p: ps) {
+						SeamParameterDefinition pd = scanParameter(p);
+						if(pd != null) def.addParameter(pd);
+					}
+				} else if(Util.isArray(c)) {
+					SeamParameterDefinition pd = scanParameter(c);
+					if(pd != null) def.addParameter(pd);
+				}				
 			}
 			IType t = Util.resolveType(c, project);
 			if(t != null) {
-				IJavaAnnotation a = loadAnnotationDeclaration(element, IN_ANNOTATION_TYPE);
-				if(a != null) {
-					def.addAnnotation(a);
-				}
+				IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
+				if(a != null) def.addAnnotation(a);
 				continue;
 			}
 		
@@ -196,35 +220,102 @@
 		return def;
 	}
 
+	private SeamParameterDefinition scanParameter(SAXElement element) {
+		if(!Util.isConfigRelevant(element)) return null;
+		SeamParameterDefinition def = new SeamParameterDefinition();
+		def.setElement(element);
+		if(Util.isArray(element)) {
+			if(element.hasAttribute(CDISeamConfigConstants.ATTR_DIMENSIONS)) {
+				def.setDimensions(element.getAttribute(CDISeamConfigConstants.ATTR_DIMENSIONS).getValue());
+			}
+			List<SAXElement> es = element.getChildElements();
+			for (SAXElement c: es) {
+				if(!Util.isConfigRelevant(c)) continue;
+				IType type = Util.resolveType(c, project);
+				if(type == null) {
+					result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_UNRESOLVED_TYPE);
+					continue;
+				}
+				TypeCheck typeCheck = new TypeCheck(type, c);
+				if(typeCheck.isCorrupted) continue;
+				if(typeCheck.isAnnotation) {
+					IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
+					if(a != null) def.addAnnotation(a);
+				} else {
+					def.setType(type);
+				}
+			}
+		} else {
+			IType type = Util.resolveType(element, project);
+			if(type == null) {
+				result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_UNRESOLVED_TYPE);
+				return null;
+			}
+			def.setType(type);
+			List<SAXElement> es = element.getChildElements();
+			for (SAXElement c: es) {
+				if(!Util.isConfigRelevant(c)) {
+					continue; //report?
+				}
+				if(Util.containsEEPackage(c)) continue; //we are not interested yet
+				IType t = Util.resolveType(c, project);
+				if(t != null) {
+					IJavaAnnotation a = loadAnnotationDeclaration(c, IN_ANNOTATION_TYPE);
+					if(a != null) def.addAnnotation(a);
+					continue;
+				}
+			}
+		}
+
+		return def;
+	}
+
 	private IJavaAnnotation loadAnnotationDeclaration(SAXElement element, int contextKind) {
 		if(!Util.isConfigRelevant(element)) return null;
 		
 		IType type = Util.resolveType(element, project);
 		if(type == null) {
 			if(contextKind == IN_ANNOTATION_TYPE) {
-				result.addUnresolvedNode(element, CDISeamConfigConstants.UNRESOLVED_TYPE);
+				result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_UNRESOLVED_TYPE);
 			}
 			return null;
 		}
-		boolean isAnnnotation = false;
-		try {
-			isAnnnotation = type.isAnnotation();
-		} catch (JavaModelException e) {
-			CDISeamConfigCorePlugin.getDefault().logError(e);
-			result.addUnresolvedNode(element, CDISeamConfigConstants.UNRESOLVED_TYPE);
-			return null;
-		}
-		if(isAnnnotation) {
+		TypeCheck typeCheck = new TypeCheck(type, element);
+		if(typeCheck.isCorrupted) return null;
+		if(typeCheck.isAnnotation) {
 			context.getRootContext().getAnnotationKind(type); // kick it
+			String value = null;
+			SAXText text = element.getTextNode();
+			if(text != null && text.getValue() != null && text.getValue().trim().length() > 0) {
+				value = text.getValue();
+			}
 			AnnotationLiteral literal = new AnnotationLiteral(resource,  
 					element.getLocation().getStartPosition(), element.getLocation().getLength(), 
-					null, 0, type);
-			//TODO read and add member values.
+					value, IMemberValuePair.K_STRING, type);
+			Set<String> ns = element.getAttributeNames();
+			for (String n: ns) {
+				String v = element.getAttribute(n).getValue();
+				literal.addMemberValuePair(n, v, IMemberValuePair.K_STRING);
+			}
 			return literal;
 		} else if(contextKind == IN_ANNOTATION_TYPE) {
-			result.addUnresolvedNode(element, CDISeamConfigConstants.ANNOTATION_EXPECTED);
+			result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_ANNOTATION_EXPECTED);
 		}		
 		return null;
 	}
 
+	class TypeCheck {
+		boolean isCorrupted = false;
+		boolean isAnnotation = false;
+		TypeCheck(IType type, SAXElement element) {
+			try {
+				isAnnotation = type.isAnnotation();
+			} catch (JavaModelException e) {
+				CDISeamConfigCorePlugin.getDefault().logError(e);
+				result.addUnresolvedNode(element, CDISeamConfigConstants.ERROR_UNRESOLVED_TYPE);
+				isCorrupted = true;
+			}
+		}
+	}
+
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java	2011-04-26 22:46:59 UTC (rev 30856)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java	2011-04-26 23:11:51 UTC (rev 30857)
@@ -12,7 +12,7 @@
 import org.jboss.tools.cdi.seam.config.core.CDISeamConfigConstants;
 import org.jboss.tools.cdi.seam.config.core.scanner.SAXElement;
 
-public class Util {
+public class Util implements CDISeamConfigConstants {
 	public static Map<String, String> EE_TYPES = new HashMap<String, String>();
 	
 	static {
@@ -104,12 +104,45 @@
 		return uri.split(":");
 	}
 
+	public static boolean containsEEPackage(SAXElement element) {
+		return containsEEPackage(element.getURI());
+	}
+
 	public static boolean containsEEPackage(String uri) {
 		String[] ps = getPackages(uri);
-		for (String p: ps) if("ee".equals(p)) {
+		for (String p: ps) if(CDISeamConfigConstants.PACKAGE_EE.equals(p)) {
 			return true;
 		}
 		return false;
 	}
 
+	public static boolean isArray(SAXElement element) {
+		return isKeyword(element, KEYWORD_ARRAY);
+	}
+
+	public static boolean isEntry(SAXElement element) {
+		return isKeyword(element, KEYWORD_ENTRY, KEYWORD_E);
+	}
+
+	public static boolean isKey(SAXElement element) {
+		return isKeyword(element, KEYWORD_KEY, KEYWORD_K);
+	}
+
+	public static boolean isValue(SAXElement element) {
+		return isKeyword(element, KEYWORD_VALUE, KEYWORD_V);
+	}
+
+	public static boolean isParameters(SAXElement element) {
+		return isKeyword(element, KEYWORD_PARAMETERS);
+	}
+
+	public static boolean isKeyword(SAXElement element, String keyword) {
+		return keyword.equals(element.getLocalName()) && containsEEPackage(element);
+	}
+
+	public static boolean isKeyword(SAXElement element, String keyword1, String keyword2) {
+		String n = element.getLocalName();
+		return (keyword1.equals(n) || keyword2.equals(n)) && containsEEPackage(element);
+	}
+
 }



More information about the jbosstools-commits mailing list