Author: scabanovich
Date: 2010-06-03 10:28:16 -0400 (Thu, 03 Jun 2010)
New Revision: 22514
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.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/QualifierElement.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
Log:
https://jira.jboss.org/browse/JBIDE-6401
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -10,11 +10,21 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
+import java.util.Set;
+
+import org.eclipse.jdt.core.IMethod;
+
/**
* Represents an interceptor binding type.
*
* @author Viacheslav Kabanovich
*/
public interface IQualifier extends ICDIAnnotation {
-
+
+ /**
+ * Returns set of members annotated with @Nonbinding
+ *
+ * @return set of members annotated with @Nonbinding
+ */
+ public Set<IMethod> getNonBindingMethods();
}
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-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -317,7 +317,7 @@
return false;
}
- public static boolean areMatchingQualifiers(Set<? extends IAnnotationDeclaration>
beanQualifiers, Set<? extends IAnnotationDeclaration> injectionQualifiers) throws
CoreException {
+ public static boolean areMatchingQualifiers(Set<IQualifierDeclaration>
beanQualifiers, Set<IQualifierDeclaration> injectionQualifiers) throws CoreException
{
if(beanQualifiers == null || beanQualifiers.isEmpty()) {
if(injectionQualifiers == null || injectionQualifiers.isEmpty()) {
return true;
@@ -325,7 +325,7 @@
}
TreeSet<String> injectionKeys = new TreeSet<String>();
- if(injectionQualifiers != null) for (IAnnotationDeclaration d: injectionQualifiers) {
+ if(injectionQualifiers != null) for (IQualifierDeclaration d: injectionQualifiers) {
injectionKeys.add(getQualifierDeclarationKey(d));
}
@@ -339,7 +339,7 @@
TreeSet<String> beanKeys = new TreeSet<String>();
if(beanQualifiers == null || beanQualifiers.isEmpty()) {
beanKeys.add(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME);
- } else for (IAnnotationDeclaration d: beanQualifiers) {
+ } else for (IQualifierDeclaration d: beanQualifiers) {
beanKeys.add(getQualifierDeclarationKey(d));
}
if(beanKeys.size() == 1 &&
beanKeys.iterator().next().startsWith(CDIConstants.NAMED_QUALIFIER_TYPE_NAME)) {
@@ -359,7 +359,7 @@
* @return
* @throws CoreException
*/
- public static boolean areMatchingQualifiers(Set<? extends IAnnotationDeclaration>
beanQualifiers, IType... injectionQualifiers) throws CoreException {
+ public static boolean areMatchingQualifiers(Set<IQualifierDeclaration>
beanQualifiers, IType... injectionQualifiers) throws CoreException {
if(beanQualifiers == null || beanQualifiers.isEmpty()) {
if(injectionQualifiers == null || injectionQualifiers.length == 0) {
return true;
@@ -394,7 +394,9 @@
return true;
}
- public static String getQualifierDeclarationKey(IAnnotationDeclaration d) throws
CoreException {
+ public static String getQualifierDeclarationKey(IQualifierDeclaration d) throws
CoreException {
+ IQualifier q = d.getQualifier();
+ Set<IMethod> nb = q == null ? new HashSet<IMethod>() :
q.getNonBindingMethods();
IType type = d.getType();
IMethod[] ms = type.getMethods();
StringBuffer result = new StringBuffer();
@@ -411,7 +413,13 @@
}
for (IMethod m: ms) {
String n = m.getElementName();
- if(values.containsKey(n)) continue;
+ if(nb.contains(m)) {
+ values.remove(n);
+ continue;
+ }
+ if(values.containsKey(n)) {
+ continue;
+ }
IMemberValuePair p = m.getDefaultValue();
n = p.getMemberName();
Object o = p.getValue();
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -10,7 +10,13 @@
******************************************************************************/
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.IMethod;
import org.jboss.tools.cdi.core.IQualifier;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationMemberDefinition;
/**
*
@@ -18,7 +24,23 @@
*
*/
public class QualifierElement extends CDIAnnotationElement implements IQualifier {
+ Set<IMethod> nonbindingMethods = null;
public QualifierElement() {}
+ public Set<IMethod> getNonBindingMethods() {
+ if(nonbindingMethods == null) {
+ Set<IMethod> result = new HashSet<IMethod>();
+ List<AnnotationMemberDefinition> ms = definition.getMethods();
+ for (AnnotationMemberDefinition m: ms) {
+ if(m.getNonbindingAnnotation() != null) {
+ result.add(m.getMethod());
+ }
+ }
+ nonbindingMethods = result;
+ }
+ return nonbindingMethods;
+
+ }
+
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -21,9 +21,7 @@
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.core.SourceRange;
import org.jboss.tools.cdi.core.IParametedType;
-import org.jboss.tools.cdi.internal.core.impl.CDIProject;
import org.jboss.tools.cdi.internal.core.impl.ParametedType;
-import org.jboss.tools.cdi.internal.core.impl.TypeDeclaration;
import org.jboss.tools.common.util.FileUtil;
/**
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -10,10 +10,13 @@
******************************************************************************/
package org.jboss.tools.cdi.internal.core.impl.definition;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
@@ -35,6 +38,8 @@
protected int kind = NON_RELEVANT;
+ List<AnnotationMemberDefinition> methods = new
ArrayList<AnnotationMemberDefinition>();
+
public AnnotationDefinition() {}
public void setKind(int kind) {
@@ -45,6 +50,10 @@
return kind;
}
+ public List<AnnotationMemberDefinition> getMethods() {
+ return methods;
+ }
+
@Override
protected void init(IType contextType, DefinitionContext context) throws CoreException
{
super.init(contextType, context);
@@ -73,8 +82,24 @@
} else if(AnnotationHelper.CDI_ANNOTATION_TYPES.contains(qualifiedName)) {
kind = AnnotationDefinition.CDI;
}
+
+ if(kind == QUALIFIER) {
+ initMemberDefinitions(contextType, context);
+ }
}
+ void initMemberDefinitions(IType contextType, DefinitionContext context) throws
CoreException {
+ IMethod[] ms = getType().getMethods();
+ for (int i = 0; i < ms.length; i++) {
+ AnnotationMemberDefinition m = new AnnotationMemberDefinition();
+ m.setAnnotationDefinition(this);
+ m.setMethod(ms[i], context);
+ if(m.isCDIAnnotated()) {
+ methods.add(m);
+ }
+ }
+ }
+
public AnnotationDeclaration getInheritedAnnotation() {
return annotationsByType.get(CDIConstants.INHERITED_ANNOTATION_TYPE_NAME);
}
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.definition;
+
+import org.eclipse.jdt.core.IMethod;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class AnnotationMemberDefinition extends AbstractMemberDefinition {
+ AnnotationDefinition annotationDefinition;
+ IMethod method;
+
+ public AnnotationMemberDefinition() {}
+
+ public void setAnnotationDefinition(AnnotationDefinition annotationDefinition) {
+ this.annotationDefinition = annotationDefinition;
+ }
+
+ public AnnotationDefinition getTypeDefinition() {
+ return annotationDefinition;
+ }
+
+ public void setMethod(IMethod method, DefinitionContext context) {
+ this.method = method;
+ setAnnotatable(method, method.getDeclaringType(), context);
+ }
+
+ public IMethod getMethod() {
+ return method;
+ }
+
+ public boolean isCDIAnnotated() {
+ return getNonbindingAnnotation() != null;
+ }
+
+ public AnnotationDeclaration getNonbindingAnnotation() {
+ return annotationsByType.get(CDIConstants.NON_BINDING_ANNOTATION_TYPE_NAME);
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -11,8 +11,6 @@
package org.jboss.tools.cdi.internal.core.impl.definition;
import org.eclipse.jdt.core.IField;
-import org.jboss.tools.cdi.core.CDIConstants;
-import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
/**
*
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/ParametedTypeFactory.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -10,7 +10,6 @@
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jdt.core.JavaModelException;
import org.jboss.tools.cdi.internal.core.impl.ParametedType;
import org.jboss.tools.cdi.internal.core.impl.TypeDeclaration;
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 2010-06-03
13:32:55 UTC (rev 22513)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-06-03
14:28:16 UTC (rev 22514)
@@ -1393,7 +1393,7 @@
String returnTypeSignature = method.getReturnType();
int kind = Signature.getTypeSignatureKind(returnTypeSignature);
if(kind == Signature.ARRAY_TYPE_SIGNATURE) {
- if(!CDIUtil.hasNonBindingAnnotationDeclaration(type, method)) {
+ if(!qualifier.getNonBindingMethods().contains(method)) {
ITextSourceReference reference =
CDIUtil.convertToSourceReference(method.getNameRange());
addError(CDIValidationMessages.MISSING_NONBINDING_FOR_ARRAY_VALUE_IN_QUALIFIER_TYPE_MEMBER,
CDIPreferences.MISSING_NONBINDING_IN_QUALIFIER_TYPE_MEMBER, reference,
qualifier.getResource());
}