Author: scabanovich
Date: 2007-07-09 12:37:13 -0400 (Mon, 09 Jul 2007)
New Revision: 2362
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ASTVisitorImpl.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ComponentBuilder.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/SeamAnnotations.java
Log:
EXIN-217 Java source scanner is being developed.
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -1,6 +1,8 @@
package org.jboss.tools.seam.internal.core;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -10,6 +12,7 @@
import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration;
import org.jboss.tools.seam.core.ScopeType;
import org.jboss.tools.seam.core.event.Change;
+import org.jboss.tools.seam.internal.core.scanner.java.ValueInfo;
public class AbstractContextVariable implements ISeamContextVariable,
ISeamTextSourceReference {
/**
@@ -28,6 +31,8 @@
protected ScopeType scopeType;
protected String scope;
+ protected Map<String,ValueInfo> attributes = new HashMap<String,
ValueInfo>();
+
public Object getId() {
return id;
}
@@ -63,6 +68,9 @@
public void setScopeAsString(String scope) {
try {
+ if(scope != null && scope.indexOf('.') > 0) {
+ scope = scope.substring(scope.lastIndexOf('.'));
+ }
this.scopeType = scope == null || scope.length() == 0 ? ScopeType.UNSPECIFIED :
ScopeType.valueOf(scope.toUpperCase());
} catch (Exception e) {
//ignore
@@ -116,4 +124,14 @@
return s1 == null ? s2 == null : s1.equals(s2);
}
+ public void setName(ValueInfo value) {
+ attributes.put(ISeamXmlComponentDeclaration.NAME, value);
+ name = value == null ? null : value.getValue();
+ }
+
+ public void setScope(ValueInfo value) {
+ attributes.put(ISeamXmlComponentDeclaration.SCOPE, value);
+ setScopeAsString(value == null ? null : value.getValue());
+ }
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -28,8 +28,6 @@
public class SeamAnnotatedFactory extends SeamJavaContextVariable implements
ISeamAnnotatedFactory {
boolean autoCreate = false;
- protected Map<String,ValueInfo> attributes = new HashMap<String,
ValueInfo>();
-
public IMethod getSourceMethod() {
return (IMethod)javaSource;
}
@@ -82,16 +80,6 @@
return reference;
}
- public void setName(ValueInfo value) {
- attributes.put(ISeamXmlComponentDeclaration.NAME, value);
- name = value == null ? null : value.getValue();
- }
-
- public void setScope(ValueInfo value) {
- attributes.put(ISeamXmlComponentDeclaration.SCOPE, value);
- setScopeAsString(value == null ? null : value.getValue());
- }
-
public void setAutoCreate(ValueInfo value) {
attributes.put(ISeamXmlComponentDeclaration.AUTO_CREATE, value);
setAutoCreate(value != null && "true".equals(value.getValue()));
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -37,6 +37,10 @@
public IMember getSourceMember() {
return javaSource;
}
+
+ public void setSourceMember(IMember javaSource) {
+ this.javaSource = javaSource;
+ }
public int getLength() {
return 0;
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ASTVisitorImpl.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ASTVisitorImpl.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ASTVisitorImpl.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -82,6 +82,10 @@
}
String resolveType(Annotation node) {
+ return resolveType(type, node);
+ }
+
+ static String resolveType(IType type, Annotation node) {
Name nm = node.getTypeName();
if(nm instanceof SimpleName) {
SimpleName sn = (SimpleName)nm;
@@ -96,7 +100,7 @@
return null;
}
- boolean isSeamAnnotationType(String n) {
+ static boolean isSeamAnnotationType(String n) {
return n != null && (n.startsWith(SEAM_ANNOTATION_TYPE_PREFIX)
|| n.equals(STATEFUL_ANNOTATION_TYPE));
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ComponentBuilder.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ComponentBuilder.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/ComponentBuilder.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -10,22 +10,28 @@
******************************************************************************/
package org.jboss.tools.seam.internal.core.scanner.java;
-import java.util.HashSet;
-import java.util.Iterator;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Annotation;
+import org.eclipse.jdt.core.dom.ArrayInitializer;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.NormalAnnotation;
+import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
import org.eclipse.jdt.core.dom.VariableDeclaration;
+import org.jboss.tools.seam.core.BijectedAttributeType;
import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration;
+import org.jboss.tools.seam.internal.core.BijectedAttribute;
+import org.jboss.tools.seam.internal.core.Role;
import org.jboss.tools.seam.internal.core.SeamAnnotatedFactory;
+import org.jboss.tools.seam.internal.core.SeamComponentMethod;
import org.jboss.tools.seam.internal.core.SeamJavaComponentDeclaration;
import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
@@ -37,7 +43,7 @@
public class ComponentBuilder implements SeamAnnotations {
LoadedDeclarations ds = null;
- AnnotatedASTNode annotatedType = null;
+ AnnotatedASTNode<?> annotatedType = null;
Set<AnnotatedASTNode<FieldDeclaration>> annotatedFields = null;
Set<AnnotatedASTNode<MethodDeclaration>> annotatedMethods = null;
@@ -89,8 +95,8 @@
processFactories();
processBijections();
processComponentMethods();
+ processRoles();
- //TODO
}
void processFactories() {
@@ -105,7 +111,6 @@
factoryName.valueLength = m.getName().getLength();
factoryName.valueStartPosition = m.getName().getStartPosition();
}
- System.out.println("");
ValueInfo scope = ValueInfo.getValueInfo(a, ISeamXmlComponentDeclaration.SCOPE);
ValueInfo autoCreate = ValueInfo.getValueInfo(a, "autoCreate");
@@ -121,18 +126,86 @@
}
void processBijections() {
- //TODO
+ for (AnnotatedASTNode<MethodDeclaration> n: annotatedMethods) {
+ Annotation in = findAnnotation(n, IN_ANNOTATION_TYPE);
+ Annotation out = findAnnotation(n, OUT_ANNOTATION_TYPE);
+ if(in == null || out == null) continue;
+ MethodDeclaration m = n.getNode();
+
+ BijectedAttribute att = new BijectedAttribute();
+ component.getBijectedAttributes().add(att);
+
+ BijectedAttributeType[] types = (in == null) ? new
BijectedAttributeType[]{BijectedAttributeType.OUT}
+ : (out == null) ? new BijectedAttributeType[]{BijectedAttributeType.IN}
+ : new BijectedAttributeType[]{BijectedAttributeType.IN, BijectedAttributeType.OUT};
+ att.setTypes(types);
+
+ Annotation a = in != null ? in : out;
+ ValueInfo name = ValueInfo.getValueInfo(a, null);
+ if(name == null) {
+ name = new ValueInfo();
+ name.value = m.getName().getIdentifier();
+ }
+
+ att.setName(name.getValue());
+
+ ValueInfo scope = ValueInfo.getValueInfo(a, "scope");
+ if(scope != null) att.setScopeAsString(scope.getValue());
+
+ att.setMember(findMethod(m));
+ }
}
void processComponentMethods() {
- //TODO
+ for (AnnotatedASTNode<MethodDeclaration> n: annotatedMethods) {
+ Annotation aCreate = findAnnotation(n, CREATE_ANNOTATION_TYPE);
+ Annotation aDestroy = findAnnotation(n, DESTROY_ANNOTATION_TYPE);
+ if(aCreate == null || aDestroy == null) continue;
+ MethodDeclaration m = n.getNode();
+
+ SeamComponentMethod cm = new SeamComponentMethod();
+ component.getMethods().add(cm);
+
+ if(aCreate != null) cm.setCreate(true);
+ if(aDestroy != null) cm.setDestroy(true);
+
+ cm.setSourceMember(findMethod(m));
+ }
}
void processRoles() {
- //TODO
+ Annotation roles = findAnnotation(annotatedType, ROLES_ANNOTATION_TYPE);
+ if(roles != null) {
+ RolesVisitor visitor = new RolesVisitor((IType)component.getSourceMember());
+ roles.accept(visitor);
+ List<Annotation> rs = visitor.annotations;
+ if(rs != null) for (Annotation role : rs) {
+ createRole(role);
+ }
+ }
+ ResolvedAnnotation[] as = annotatedType.getAnnotations();
+ for (int i = 0; i < as.length; i++) {
+ if(ROLE_ANNOTATION_TYPE.equals(as[i].getType())) {
+ createRole(as[i].getAnnotation());
+ }
+ }
}
+
+ void createRole(Annotation role) {
+ Role r = new Role();
+ r.setSourcePath(component.getSourcePath());
+ r.setId(component.getSourceMember());
+
+ ValueInfo name = ValueInfo.getValueInfo(role, "name");
+ if(name == null) return;
+
+ r.setName(name);
- private Annotation findAnnotation(AnnotatedASTNode n, String type) {
+ ValueInfo scope = ValueInfo.getValueInfo(role, "scope");
+ if(scope != null) r.setScope(scope);
+ }
+
+ private Annotation findAnnotation(AnnotatedASTNode<?> n, String type) {
ResolvedAnnotation[] as = n.getAnnotations();
for (int i = 0; i < as.length; i++) {
if(type.equals(as[i].getType())) return as[i].getAnnotation();
@@ -204,3 +277,38 @@
}
}
+
+class RolesVisitor extends ASTVisitor implements SeamAnnotations {
+ boolean arrayFound = false;
+ IType type;
+ List<Annotation> annotations = new ArrayList<Annotation>();
+
+ public RolesVisitor(IType type) {
+ this.type = type;
+ }
+
+ public boolean visit(SingleMemberAnnotation node) {
+ if(arrayFound) {
+ String typeName = ASTVisitorImpl.resolveType(type, node);
+ if(!ROLE_ANNOTATION_TYPE.equals(typeName)) return false;
+ annotations.add(node);
+ return false;
+ }
+ return true;
+ }
+
+ public boolean visit(NormalAnnotation node) {
+ if(arrayFound) {
+ String typeName = ASTVisitorImpl.resolveType(type, node);
+ if(!ROLE_ANNOTATION_TYPE.equals(typeName)) return false;
+ annotations.add(node);
+ }
+ return false;
+ }
+
+ public boolean visit(ArrayInitializer node) {
+ arrayFound = true;
+ return true;
+ }
+
+}
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/SeamAnnotations.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/SeamAnnotations.java 2007-07-09
14:46:12 UTC (rev 2361)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/SeamAnnotations.java 2007-07-09
16:37:13 UTC (rev 2362)
@@ -15,6 +15,8 @@
public static String FACTORY_ANNOTATION_TYPE = SEAM_ANNOTATION_TYPE_PREFIX +
"Factory";
+ public static String ROLES_ANNOTATION_TYPE = SEAM_ANNOTATION_TYPE_PREFIX +
"Roles";
+ public static String ROLE_ANNOTATION_TYPE = SEAM_ANNOTATION_TYPE_PREFIX +
"Role";
public static String STATEFUL_ANNOTATION_TYPE = "javax.ejb.Stateful";