[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