Author: scabanovich
Date: 2011-09-12 16:35:27 -0400 (Mon, 12 Sep 2011)
New Revision: 34646
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InitializerMethod.java
Removed:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointMethod.java
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/IInitializerMethod.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/validation/CDICoreValidator.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ObserverMethodResolutionTest.java
trunk/cdi/tests/org.jboss.tools.cdi.ui.test/src/org/jboss/tools/cdi/ui/test/testmodel/CDIBean.java
Log:
JBIDE-9698
https://issues.jboss.org/browse/JBIDE-9698
Replaced InjectionPointMethod by InitializerMethod, and modified validation and tests.
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-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -71,4 +71,10 @@
*/
IClassBean getSuperClassBean();
+ /**
+ * Obtains the initializer methods of the class bean.
+ *
+ * @return the initializer methods of the class bean
+ */
+ Set<IInitializerMethod> getInitializers();
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInitializerMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInitializerMethod.java 2011-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInitializerMethod.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -10,6 +10,8 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
+import org.jboss.tools.common.java.IAnnotationDeclaration;
+
/**
* Represents an initializer method (a method annotated @Inject)
* Each parameter of this method is an injection point.
@@ -18,4 +20,10 @@
*/
public interface IInitializerMethod extends IBeanMethod {
+ /**
+ * Returns the @Inject annotation declaration
+ *
+ * @return the @Inject annotation declaration.
+ */
+ IAnnotationDeclaration getInjectAnnotation();
}
\ No newline at end of file
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-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -27,6 +27,7 @@
import org.jboss.tools.cdi.core.IBeanMethod;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IInitializerMethod;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
@@ -85,7 +86,7 @@
if(m.getProducesAnnotation() != null) {
bm = newProducerMethod(m);
} else if(m.getInjectAnnotation() != null) {
- bm = new InjectionPointMethod();
+ bm = new InitializerMethod();
} else if(m.isObserver()) {
bm = new ObserverMethod();
} else {
@@ -293,6 +294,17 @@
return ((TypeDefinition)definition).getType();
}
+ @Override
+ public Set<IInitializerMethod> getInitializers() {
+ Set<IInitializerMethod> result = new HashSet<IInitializerMethod>();
+ for (BeanMethod m: methods) {
+ if(m instanceof IInitializerMethod) {
+ result.add((IInitializerMethod)m);
+ }
+ }
+ return result;
+ }
+
public Set<IInjectionPoint> getInjectionPoints() {
Set<IInjectionPoint> result = new HashSet<IInjectionPoint>();
for (BeanField f: fields) {
@@ -301,9 +313,9 @@
}
}
for (BeanMethod m: methods) {
- if(m instanceof IInjectionPoint) {
- result.add((IInjectionPoint)m);
- }
+// if(m instanceof IInjectionPoint) {
+// result.add((IInjectionPoint)m);
+// }
List<IParameter> ps = m.getParameters();
for (IParameter p: ps) {
if(p instanceof IInjectionPoint) {
Copied:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InitializerMethod.java
(from rev 34642,
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointMethod.java)
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InitializerMethod.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InitializerMethod.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -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 org.jboss.tools.cdi.core.IInitializerMethod;
+import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
+import org.jboss.tools.common.java.IAnnotationDeclaration;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class InitializerMethod extends BeanMethod implements
+ IInitializerMethod {
+
+ public IAnnotationDeclaration getDelegateAnnotation() {
+ return getDefinition().getDelegateAnnotation();
+ }
+
+ public boolean isDelegate() {
+ return getDelegateAnnotation() != null;
+ }
+
+ @Override
+ protected Parameter newParameter(ParameterDefinition p) {
+ return new InjectionPointParameter();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInjectionPoint#getInjectAnnotation()
+ */
+ public IAnnotationDeclaration getInjectAnnotation() {
+ return inject;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInjectionPoint#containsDefaultQualifier()
+ */
+ public boolean hasDefaultQualifier() {
+ return false;//CDIUtil.containsDefaultQualifier(this);
+ }
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InitializerMethod.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Deleted:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointMethod.java 2011-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InjectionPointMethod.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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 org.jboss.tools.cdi.core.CDIUtil;
-import org.jboss.tools.cdi.core.IInjectionPointMethod;
-import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
-import org.jboss.tools.common.java.IAnnotationDeclaration;
-
-/**
- *
- * @author Viacheslav Kabanovich
- *
- */
-public class InjectionPointMethod extends BeanMethod implements
- IInjectionPointMethod {
-
- public IAnnotationDeclaration getDelegateAnnotation() {
- return getDefinition().getDelegateAnnotation();
- }
-
- public boolean isDelegate() {
- return getDelegateAnnotation() != null;
- }
-
- @Override
- protected Parameter newParameter(ParameterDefinition p) {
- return new InjectionPointParameter();
- }
-
- /*
- * (non-Javadoc)
- * @see org.jboss.tools.cdi.core.IInjectionPoint#getInjectAnnotation()
- */
- public IAnnotationDeclaration getInjectAnnotation() {
- return inject;
- }
-
- /*
- * (non-Javadoc)
- * @see org.jboss.tools.cdi.core.IInjectionPoint#containsDefaultQualifier()
- */
- public boolean hasDefaultQualifier() {
- return CDIUtil.containsDefaultQualifier(this);
- }
-
- @Override
- public String getBeanName() {
- return null;
- }
-
-}
\ 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-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -60,6 +60,7 @@
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
import org.jboss.tools.cdi.core.IDecorator;
+import org.jboss.tools.cdi.core.IInitializerMethod;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInjectionPointField;
import org.jboss.tools.cdi.core.IInjectionPointMethod;
@@ -697,6 +698,7 @@
}
private void validateClassBean(IClassBean bean) {
+ validateInitializers(bean);
validateDisposers(bean);
validateObserves(bean);
if (!(bean instanceof ISessionBean)) {
@@ -1458,6 +1460,43 @@
return false;
}
+ private void validateInitializers(IClassBean bean) {
+ Set<IInitializerMethod> initializers = bean.getInitializers();
+ for (IInitializerMethod initializer: initializers) {
+ try {
+ validateInitializerMethod(initializer);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void validateInitializerMethod(IInitializerMethod initializer) {
+ IAnnotationDeclaration named =
initializer.getAnnotation(CDIConstants.NAMED_QUALIFIER_TYPE_NAME);
+ if (named != null) {
+ boolean valueExists = named.getMemberValue(null) != null;
+ if (!valueExists) {
+ addError(CDIValidationMessages.PARAM_INJECTION_DECLARES_EMPTY_NAME,
CDIPreferences.PARAM_INJECTION_DECLARES_EMPTY_NAME, named, initializer.getResource());
+ }
+ }
+
+ IAnnotationDeclaration declaration = initializer.getInjectAnnotation();
+ /*
+ * 3.9.1. Declaring an initializer method
+ * - generic method of a bean is annotated @Inject
+ */
+ if(CDIUtil.isMethodGeneric(initializer)) {
+ addError(CDIValidationMessages.GENERIC_METHOD_ANNOTATED_INJECT,
CDIPreferences.GENERIC_METHOD_ANNOTATED_INJECT, declaration, initializer.getResource());
+ }
+ /*
+ * 3.9. Initializer methods
+ * - initializer method may not be static
+ */
+ if(CDIUtil.isMethodStatic(initializer)) {
+ addError(CDIValidationMessages.STATIC_METHOD_ANNOTATED_INJECT,
CDIPreferences.GENERIC_METHOD_ANNOTATED_INJECT, declaration, initializer.getResource());
+ }
+ }
+
private void validateInjectionPoint(IInjectionPoint injection) {
/*
* 3.11. The qualifier @Named at injection points
@@ -1475,31 +1514,6 @@
injection.getResource());
}
}
- } else if (injection instanceof IInjectionPointMethod) {
- IAnnotationDeclaration named =
injection.getAnnotation(CDIConstants.NAMED_QUALIFIER_TYPE_NAME);
- if (named != null) {
- boolean valueExists = named.getMemberValue(null) != null;
- if (!valueExists) {
- addError(CDIValidationMessages.PARAM_INJECTION_DECLARES_EMPTY_NAME,
CDIPreferences.PARAM_INJECTION_DECLARES_EMPTY_NAME, named, injection.getResource());
- }
- }
-
- IInjectionPointMethod injectionMethod = (IInjectionPointMethod)injection;
- IAnnotationDeclaration declaration = injection.getInjectAnnotation();
- /*
- * 3.9.1. Declaring an initializer method
- * - generic method of a bean is annotated @Inject
- */
- if(CDIUtil.isMethodGeneric(injectionMethod)) {
- addError(CDIValidationMessages.GENERIC_METHOD_ANNOTATED_INJECT,
CDIPreferences.GENERIC_METHOD_ANNOTATED_INJECT, declaration, injection.getResource());
- }
- /*
- * 3.9. Initializer methods
- * - initializer method may not be static
- */
- if(CDIUtil.isMethodStatic(injectionMethod)) {
- addError(CDIValidationMessages.STATIC_METHOD_ANNOTATED_INJECT,
CDIPreferences.GENERIC_METHOD_ANNOTATED_INJECT, declaration, injection.getResource());
- }
}
IAnnotationDeclaration declaration = injection.getInjectAnnotation();
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ObserverMethodResolutionTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ObserverMethodResolutionTest.java 2011-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ObserverMethodResolutionTest.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -16,6 +16,7 @@
import org.eclipse.jdt.core.IMethod;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IInitializerMethod;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInjectionPointField;
import org.jboss.tools.cdi.core.IInjectionPointMethod;
@@ -125,18 +126,12 @@
}
}
assertNotNull(cb);
- Set<IInjectionPoint> ps = cb.getInjectionPoints();
- IInjectionPointMethod mp = null;
- for (IInjectionPoint p: ps) {
- if(p instanceof IInjectionPointMethod) {
- mp = (IInjectionPointMethod)p;
- }
- }
+ Set<IInitializerMethod> ps = cb.getInitializers();
+ IInitializerMethod mp = ps.isEmpty() ? null : ps.iterator().next();
assertNotNull(mp);
assertEquals("foo", mp.getMethod().getElementName());
//no exception should happen on invoking resolveObserverMethods
- cdiProject.resolveObserverMethods(mp);
-
+// cdiProject.resolveObserverMethods(mp); not applicable to initializer method
}
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.ui.test/src/org/jboss/tools/cdi/ui/test/testmodel/CDIBean.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.ui.test/src/org/jboss/tools/cdi/ui/test/testmodel/CDIBean.java 2011-09-12
20:03:10 UTC (rev 34645)
+++
trunk/cdi/tests/org.jboss.tools.cdi.ui.test/src/org/jboss/tools/cdi/ui/test/testmodel/CDIBean.java 2011-09-12
20:35:27 UTC (rev 34646)
@@ -13,6 +13,7 @@
import org.jboss.tools.cdi.core.IBeanMethod;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IInitializerMethod;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
@@ -276,4 +277,10 @@
// TODO Auto-generated method stub
}
+
+ @Override
+ public Set<IInitializerMethod> getInitializers() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file