Author: scabanovich
Date: 2011-05-25 20:07:51 -0400 (Wed, 25 May 2011)
New Revision: 31498
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IParameter.java
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/ClassBean.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/Parameter.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
Log:
JBIDE-9006
https://issues.jboss.org/browse/JBIDE-9006
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java 2011-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -52,7 +52,7 @@
*
* @return a set of observer methods of the bean
*/
- Set<IBeanMethod> getObserverMethods();
+ Set<IObserverMethod> getObserverMethods();
/**
* Returns all the directly derived classes that declare annotation @Specializes
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IParameter.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IParameter.java 2011-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IParameter.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -10,6 +10,8 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
+import java.util.Set;
+
import org.jboss.tools.common.text.ITextSourceReference;
/**
@@ -51,4 +53,10 @@
* @return the bean method which has this parameter
*/
IBeanMethod getBeanMethod();
+
+ /**
+ *
+ * @return qualifier declarations for this parameter
+ */
+ public Set<IQualifierDeclaration> getQualifierDeclarations();
}
\ No newline at end of file
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-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -22,18 +22,17 @@
import java.util.TreeMap;
import java.util.TreeSet;
-import org.apache.xerces.util.SynchronizedSymbolTable;
import org.eclipse.core.resources.IFile;
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.IMemberValuePair;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.CatchClause;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.CDICoreNature;
import org.jboss.tools.cdi.core.CDICorePlugin;
@@ -65,9 +64,7 @@
import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
import org.jboss.tools.cdi.internal.core.scanner.ImplementationCollector;
-import org.jboss.tools.common.EclipseUtil;
import org.jboss.tools.common.model.XModelObject;
-import org.jboss.tools.common.model.util.EclipseJavaUtil;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
import org.jboss.tools.common.text.INodeReference;
@@ -494,17 +491,17 @@
return true;
}
- public static boolean areMatchingEventQualifiers(Set<IQualifierDeclaration>
eventQualifiers, IType... paramQualifiers) throws CoreException {
- if(!eventQualifiers.isEmpty() || paramQualifiers.length != 0) {
+ public static boolean areMatchingEventQualifiers(Set<IQualifierDeclaration>
eventQualifiers, Set<IQualifierDeclaration> paramQualifiers) throws CoreException {
+ if(!eventQualifiers.isEmpty() || paramQualifiers.isEmpty()) {
TreeSet<String> paramKeys = new TreeSet<String>();
- for (IType d: paramQualifiers) {
- paramKeys.add(d.getFullyQualifiedName());
+ for (IQualifierDeclaration d: paramQualifiers) {
+ paramKeys.add(getAnnotationDeclarationKey(d));
}
TreeSet<String> eventKeys = new TreeSet<String>();
for (IAnnotationDeclaration d: eventQualifiers) {
- eventKeys.add(d.getType().getFullyQualifiedName());
+ eventKeys.add(getAnnotationDeclarationKey(d));
}
if(!eventKeys.contains(CDIConstants.ANY_QUALIFIER_TYPE_NAME)) {
@@ -813,19 +810,18 @@
IParametedType eventType = getEventType(injectionPoint.getType());
if(eventType != null) {
- for (IClassBean b: classBeans.values()) {
- Set<IBeanMethod> ms = b.getObserverMethods();
- for (IBeanMethod m: ms) {
- if(m instanceof IObserverMethod) {
- IObserverMethod om = (IObserverMethod)m;
- Set<IParameter> params = om.getObservedParameters();
- if(params.isEmpty()) continue;
+ 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)) {
- continue;
- }
- if(areMatchingEventQualifiers(param, injectionPoint)) {
+ if(((ParametedType)eventType).isAssignableTo((ParametedType)paramType, true)
+ && areMatchingEventQualifiers(param, injectionPoint)) {
result.add(om);
}
}
@@ -851,15 +847,8 @@
}
private boolean areMatchingEventQualifiers(IParameter observerParam, IInjectionPoint
event) {
- Set<IQualifier> qs = ((Parameter)observerParam).getQualifiers();
- List<IType> paramQualifiers = new ArrayList<IType>();
- for (IQualifier q: qs) {
- if(q.getSourceType() != null) paramQualifiers.add(q.getSourceType());
- }
try {
- if(areMatchingEventQualifiers(event.getQualifierDeclarations(),
paramQualifiers.toArray(new IType[0]))) {
- return true;
- }
+ return areMatchingEventQualifiers(event.getQualifierDeclarations(),
observerParam.getQualifierDeclarations());
} catch (CoreException err) {
CDICorePlugin.getDefault().logError(err);
}
@@ -867,22 +856,22 @@
}
public Set<IInjectionPoint> findObservedEvents(IParameter observedEventParameter)
{
- Set<IInjectionPoint> result = new HashSet<IInjectionPoint>();
+ Map<IField, IInjectionPoint> result = new HashMap<IField,
IInjectionPoint>();
if(observedEventParameter.getBeanMethod() instanceof IObserverMethod) {
IParametedType paramType = observedEventParameter.getType();
- for (IClassBean b: classBeans.values()) {
+ for (IBean ib: allBeans) {
+ if(!(ib instanceof IClassBean)) {
+ continue;
+ }
+ IClassBean b = (IClassBean)ib;
Set<IInjectionPoint> ps = b.getInjectionPoints();
for (IInjectionPoint p: ps) {
- if(p.getType() == null && p instanceof IInjectionPointField) {
- System.out.println("shit");
- continue;
- }
- if(p instanceof IInjectionPointField) {
+ if(p instanceof IInjectionPointField && p.getType() != null) {
IParametedType eventType = getEventType(p.getType());
if(eventType != null &&
((ParametedType)eventType).isAssignableTo((ParametedType)paramType, true)) {
if(areMatchingEventQualifiers(observedEventParameter, p)) {
- result.add(p);
+ result.put(((IInjectionPointField)p).getField(), p);
}
}
}
@@ -890,7 +879,7 @@
}
}
- return result;
+ return new HashSet<IInjectionPoint>(result.values());
}
public Set<IBeanMethod> resolveDisposers(IProducerMethod producer) {
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2011-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -29,6 +29,7 @@
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
+import org.jboss.tools.cdi.core.IObserverMethod;
import org.jboss.tools.cdi.core.IParametedType;
import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.core.IProducer;
@@ -215,11 +216,11 @@
return CDIUtil.getAllInterceptorBindings(this);
}
- public Set<IBeanMethod> getObserverMethods() {
- Set<IBeanMethod> result = new HashSet<IBeanMethod>();
+ public Set<IObserverMethod> getObserverMethods() {
+ Set<IObserverMethod> result = new HashSet<IObserverMethod>();
for (BeanMethod m: methods) {
- if(m.isObserver()) {
- result.add(m);
+ if(m.isObserver() && m instanceof IObserverMethod) {
+ result.add((IObserverMethod)m);
}
}
return result;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/Parameter.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/Parameter.java 2011-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/Parameter.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -1,16 +1,19 @@
package org.jboss.tools.cdi.internal.core.impl;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.ISourceReference;
+import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.IBeanMethod;
import org.jboss.tools.cdi.core.IClassBean;
import org.jboss.tools.cdi.core.IParametedType;
import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.core.IQualifier;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
public class Parameter extends BeanMember implements IParameter {
@@ -88,4 +91,17 @@
return result;
}
+ public Set<IQualifierDeclaration> getQualifierDeclarations() {
+ Set<IQualifierDeclaration> result = new HashSet<IQualifierDeclaration>();
+
+ List<IAnnotationDeclaration> ds = definition.getAnnotations();
+ for (IAnnotationDeclaration d: ds) {
+ if(d instanceof IQualifierDeclaration) {
+ result.add((IQualifierDeclaration)d);
+ }
+ }
+
+ return result;
+ }
+
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2011-05-26
00:02:45 UTC (rev 31497)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2011-05-26
00:07:51 UTC (rev 31498)
@@ -68,6 +68,7 @@
import org.jboss.tools.cdi.core.IInterceptorBinded;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
+import org.jboss.tools.cdi.core.IObserverMethod;
import org.jboss.tools.cdi.core.IParametedType;
import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.core.IProducer;
@@ -799,11 +800,11 @@
}
private void validateObserves(IClassBean bean) {
- Set<IBeanMethod> observes = bean.getObserverMethods();
+ Set<IObserverMethod> observes = bean.getObserverMethods();
if (observes.isEmpty()) {
return;
}
- for (IBeanMethod observer : observes) {
+ for (IObserverMethod observer : observes) {
List<IParameter> params = observer.getParameters();
Set<ITextSourceReference> declarations = new
HashSet<ITextSourceReference>();
for (IParameter param : params) {