Author: scabanovich
Date: 2010-05-21 09:40:29 -0400 (Fri, 21 May 2010)
New Revision: 22237
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointParameter.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.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/ProducerMethod.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
Log:
https://jira.jboss.org/browse/JBIDE-6310
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java 2010-05-21
13:10:34 UTC (rev 22236)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java 2010-05-21
13:40:29 UTC (rev 22237)
@@ -41,13 +41,17 @@
List<ParameterDefinition> ps = definition.getParameters();
for (ParameterDefinition p: ps) {
- Parameter parameter = new Parameter();
+ Parameter parameter = newParameter();
parameter.setBeanMethod(this);
parameter.setDefinition(p);
parameters.add(parameter);
}
}
+ protected Parameter newParameter() {
+ return new Parameter();
+ }
+
public IMethod getMethod() {
return method;
}
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 2010-05-21
13:10:34 UTC (rev 22236)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2010-05-21
13:40:29 UTC (rev 22237)
@@ -44,6 +44,7 @@
import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.core.IProducer;
import org.jboss.tools.cdi.core.IProducerMethod;
+import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.core.IQualifierDeclaration;
import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
@@ -245,8 +246,19 @@
if(type == null) {
return result;
}
+
+ boolean isParameter = injectionPoints instanceof InjectionPointParameter;
Set<IQualifierDeclaration> qs = injectionPoints.getQualifierDeclarations();
+ List<IType> qs2 = null;
+ if(isParameter) {
+ qs2 = new ArrayList<IType>();
+ Set<IQualifier> qs_ =
((InjectionPointParameter)injectionPoints).getQualifiers();
+ for (IQualifier q: qs_) {
+ IType t = q.getSourceType();
+ if(t != null) qs2.add(t);
+ }
+ }
Set<IBean> beans = new HashSet<IBean>();
synchronized(allBeans) {
@@ -257,8 +269,14 @@
if(containsType(types, type)) {
try {
Set<IQualifierDeclaration> qsb = b.getQualifierDeclarations(true);
- if(areMatchingQualifiers(qsb, qs)) {
- result.add(b);
+ if(isParameter) {
+ if(areMatchingQualifiers(qsb, qs2.toArray(new IType[0]))) {
+ result.add(b);
+ }
+ } else {
+ if(areMatchingQualifiers(qsb, qs)) {
+ result.add(b);
+ }
}
} catch (CoreException e) {
CDICorePlugin.getDefault().logError(e);
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointParameter.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointParameter.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointParameter.java 2010-05-21
13:40:29 UTC (rev 22237)
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.core.impl;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.IAnnotationDeclaration;
+import org.jboss.tools.cdi.core.IInjectionPointParameter;
+import org.jboss.tools.cdi.core.IQualifier;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class InjectionPointParameter extends Parameter implements
+ IInjectionPointParameter {
+
+ public IAnnotationDeclaration getDelegateAnnotation() {
+ return null;
+ }
+
+ public Set<IQualifierDeclaration> getQualifierDeclarations() {
+ Set<IQualifierDeclaration> result = new HashSet<IQualifierDeclaration>();
+ //cannot implement
+ return result;
+ }
+
+ public Set<IQualifier> getQualifiers() {
+ Set<IQualifier> result = new HashSet<IQualifier>();
+ Set<String> as = getAnnotationTypes();
+ for (String s: as) {
+ IQualifier q = getCDIProject().getQualifier(s);
+ if (q != null) result.add(q);
+ }
+ return result;
+ }
+
+ public boolean isDelegate() {
+ return isAnnotationPresent(CDIConstants.DELEGATE_STEREOTYPE_TYPE_NAME);
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointParameter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ProducerMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ProducerMethod.java 2010-05-21
13:10:34 UTC (rev 22236)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ProducerMethod.java 2010-05-21
13:40:29 UTC (rev 22237)
@@ -22,6 +22,7 @@
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IParametedType;
+import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.core.IProducerMethod;
import org.jboss.tools.cdi.core.IScope;
import org.jboss.tools.cdi.core.IScopeDeclaration;
@@ -50,6 +51,10 @@
produces = definition.getProducesAnnotation();
}
+ protected Parameter newParameter() {
+ return new InjectionPointParameter();
+ }
+
public Set<ITypeDeclaration> getAllTypeDeclarations() {
Set<ITypeDeclaration> result = new HashSet<ITypeDeclaration>();
if(typeDeclaration != null && typeDeclaration.getStartPosition() > 0) {
@@ -67,7 +72,13 @@
}
public Set<IInjectionPoint> getInjectionPoints() {
- return new HashSet<IInjectionPoint>();
+ HashSet<IInjectionPoint> result = new HashSet<IInjectionPoint>();
+ for (IParameter p: parameters) {
+ if(p instanceof IInjectionPoint) {
+ result.add((IInjectionPoint)p);
+ }
+ }
+ return result;
}
public Set<IParametedType> getLegalTypes() {
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-05-21
13:10:34 UTC (rev 22236)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-05-21
13:40:29 UTC (rev 22237)
@@ -12,6 +12,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.StringTokenizer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IMethod;
@@ -59,6 +60,7 @@
void loadParamDefinitions(IType contextType, DefinitionContext context) throws
CoreException {
if(method == null) return;
+ boolean isProducer = getProducesAnnotation() != null;
String[] parameterNames = method.getParameterNames();
if(parameterNames == null || parameterNames.length == 0) return;
if(contextType == null || contextType.isBinary()) return;
@@ -78,7 +80,7 @@
int start = paramStart + 1;
for (int i = 0; i < params.length; i++) {
- if(params[i].indexOf('@') < 0) {
+ if(params[i].indexOf('@') < 0 && !isProducer) {
start += params[i].length() + 1;
continue; //do not need parameters without annotation
}
@@ -91,14 +93,19 @@
pd.name = parameterNames[i];
pd.index = i;
pd.type = type;
+
+ String p = params[i].trim();
+ int pi = params[i].indexOf(p);
+
ValueInfo v = new ValueInfo();
v.setValue(params[i]);
- v.valueStartPosition = start;
- v.valueLength = params[i].length();
+ v.valueStartPosition = start + pi;
+ v.valueLength = p.length();
pd.setPosition(v);
- String[] tokens = params[i].split(" ");
- for (String q: tokens) {
+ StringTokenizer tokens = new StringTokenizer(p, " \r\n\t");
+ while (tokens.hasMoreElements()) {
+ String q = tokens.nextToken();
if(!q.startsWith("@")) continue;
v = new ValueInfo();
v.setValue(q);