[jbosstools-commits] JBoss Tools SVN: r35781 - trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Oct 18 20:22:55 EDT 2011


Author: scabanovich
Date: 2011-10-18 20:22:55 -0400 (Tue, 18 Oct 2011)
New Revision: 35781

Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
Log:
JBIDE-9904
https://issues.jboss.org/browse/JBIDE-9904
CDIProject.findObservedEvents(IParameter) improved.

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java	2011-10-18 23:59:45 UTC (rev 35780)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java	2011-10-19 00:22:55 UTC (rev 35781)
@@ -23,18 +23,17 @@
 import java.util.TreeSet;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaElement;
 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;
 import org.jboss.tools.cdi.core.CDIConstants;
 import org.jboss.tools.cdi.core.CDICoreNature;
 import org.jboss.tools.cdi.core.CDICorePlugin;
@@ -95,6 +94,7 @@
 	private Map<IPath, ScopeElement> scopesByPath = new HashMap<IPath, ScopeElement>();
 
 	private Set<IBean> allBeans = new HashSet<IBean>();
+	private Set<IBean> declaredBeans = new HashSet<IBean>();
 	private Map<IPath, Set<IBean>> beansByPath = new HashMap<IPath, Set<IBean>>();
 	private Map<String, Set<IBean>> beansByName = new HashMap<String, Set<IBean>>();
 	private Set<IBean> namedBeans = new HashSet<IBean>();
@@ -136,6 +136,10 @@
 		return allBeans.toArray(new IBean[allBeans.size()]);
 	}
 
+	public synchronized Set<IBean> getDeclaredBeans() {
+		return new HashSet<IBean>(declaredBeans);
+	}
+
 	public List<INodeReference> getAlternativeClasses() {
 		List<INodeReference> result = new ArrayList<INodeReference>();
 		synchronized (allBeansXMLData) {
@@ -857,35 +861,55 @@
 		return result;
 	}
 
+	/**
+	 * This method looks for observed methods in all the set of related projects.
+	 * To this end, it activates all CDI projects in workspace. 
+	 */
 	public Set<IObserverMethod> resolveObserverMethods(IInjectionPoint injectionPoint) {
 		Set<IObserverMethod> result = new HashSet<IObserverMethod>();
-
 		IParametedType eventType = getEventType(injectionPoint);
-
 		if(eventType != null) {
 			synchronized(this) {
-				for (IBean ib: allBeans) {
-					if(!(ib instanceof IClassBean)) continue;
-					IClassBean b = (IClassBean)ib;
-					Set<IObserverMethod> ms = b.getObserverMethods();
-					for (IObserverMethod m: ms) {
-						IObserverMethod om = (IObserverMethod)m;
-						Set<IParameter> params = om.getObservedParameters();
-						if(!params.isEmpty()) {
-							IParameter param = params.iterator().next();
-							IParametedType paramType = param.getType();
-							if(((ParametedType)eventType).isAssignableTo((ParametedType)paramType, true)
-									&& areMatchingEventQualifiers(param, injectionPoint)) {
-								result.add(om);
-							}
-						}
-					}			
+				for (IBean b: allBeans) {
+					if(b instanceof IClassBean) {
+						collectObserverMethods((IClassBean)b, eventType, injectionPoint, result);
+					}
 				}
 			}
 		}
+		for (IProject p: ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+			if(p.isAccessible()) {
+				CDICorePlugin.getCDI(p, true);
+			}
+		}
+		CDICoreNature[] ns = getNature().getAllDependentProjects();
+		for (CDICoreNature n: ns) {
+			if(n.getDelegate() instanceof CDIProject) {
+				CDIProject p = (CDIProject)n.getDelegate();
+				for (IBean b: p.getDeclaredBeans()) {
+					if(b instanceof IClassBean) {
+						collectObserverMethods((IClassBean)b, eventType, injectionPoint, result);
+					}
+				}
+			}
+		}
 		return result;
 	}
 
+	private void collectObserverMethods(IClassBean b, IParametedType eventType, IInjectionPoint injectionPoint, Set<IObserverMethod> result) {
+		for (IObserverMethod m: b.getObserverMethods()) {
+			Set<IParameter> params = m.getObservedParameters();
+			if(!params.isEmpty()) {
+				IParameter param = params.iterator().next();
+				IParametedType paramType = param.getType();
+				if(((ParametedType)eventType).isAssignableTo((ParametedType)paramType, true)
+						&& areMatchingEventQualifiers(param, injectionPoint)) {
+					result.add(m);
+				}
+			}
+		}			
+	}
+
 	/**
 	 * Returns type parameter of type javax.enterprise.event.Event<T>
 	 * In all other cases returns null.
@@ -911,35 +935,56 @@
 		return false;
 	}
 
+	/**
+	 * This method looks for observed events in all the set of related projects.
+	 * To this end, it activates all CDI projects in workspace. 
+	 */
 	public Set<IInjectionPoint> findObservedEvents(IParameter observedEventParameter) {
 		Map<IField, IInjectionPoint> result = new HashMap<IField, IInjectionPoint>();
 
 		if(observedEventParameter.getBeanMethod() instanceof IObserverMethod) {
-			IParametedType paramType = observedEventParameter.getType();
 			synchronized(this) {
-				for (IBean ib: allBeans) {
-					if(!(ib instanceof IClassBean)) {
-						continue;
+				for (IBean b: allBeans) {
+					if(b instanceof IClassBean) {
+						collectObserverEvents((IClassBean)b, observedEventParameter, result);
 					}
-					IClassBean b = (IClassBean)ib;
-					Set<IInjectionPoint> ps = b.getInjectionPoints();
-					for (IInjectionPoint p: ps) {
-						if(p instanceof IInjectionPointField) {
-							IParametedType eventType = getEventType(p);
-							if(eventType != null && ((ParametedType)eventType).isAssignableTo((ParametedType)paramType, true)) {
-								if(areMatchingEventQualifiers(observedEventParameter, p)) {
-									 result.put(((IInjectionPointField)p).getField(), p);
-								 }
-							}
+				}
+			}
+			for (IProject p: ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+				if(p.isAccessible()) {
+					CDICorePlugin.getCDI(p, true);
+				}
+			}
+			CDICoreNature[] ns = getNature().getAllDependentProjects();
+			for (CDICoreNature n: ns) {
+				if(n.getDelegate() instanceof CDIProject) {
+					CDIProject p = (CDIProject)n.getDelegate();
+					for (IBean b: p.getDeclaredBeans()) {
+						if(b instanceof IClassBean) {
+							collectObserverEvents((IClassBean)b, observedEventParameter, result);
 						}
 					}
-				}
+				}					
 			}
 		}
 
 		return new HashSet<IInjectionPoint>(result.values());
 	}
 
+	private void collectObserverEvents(IClassBean b, IParameter observedEventParameter, Map<IField, IInjectionPoint> result) {
+		Set<IInjectionPoint> ps = b.getInjectionPoints();
+		for (IInjectionPoint p: ps) {
+			if(p instanceof IInjectionPointField) {
+				IParametedType eventType = getEventType(p);
+				if(eventType != null && ((ParametedType)eventType).isAssignableTo((ParametedType)observedEventParameter.getType(), true)) {
+					if(areMatchingEventQualifiers(observedEventParameter, p)) {
+						 result.put(((IInjectionPointField)p).getField(), p);
+					 }
+				}
+			}
+		}
+	}
+
 	public Set<IBeanMethod> resolveDisposers(IProducerMethod producer) {
 		Set<IBeanMethod> result = new HashSet<IBeanMethod>();
 		IClassBean cb = producer.getClassBean();
@@ -1233,6 +1278,7 @@
 			decorators.clear();
 			interceptors.clear();
 			allBeans.clear();
+			declaredBeans.clear();
 			injectionPointsByType.clear();
 		}
 
@@ -1326,6 +1372,9 @@
 				}
 			}
 			allBeans.add(bean);
+			if(bean.getDeclaringProject() == this) {
+				declaredBeans.add(bean);
+			}
 		}
 	}
 



More information about the jbosstools-commits mailing list