Author: akazakov
Date: 2010-09-06 15:15:50 -0400 (Mon, 06 Sep 2010)
New Revision: 24749
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClass.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClassBean.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype2.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/BeanClass.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/ClassBean.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/InterceptorBean.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/LoggerDecorator.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/NotAlternativeStereotype.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/ca/BeansXmlCATest.java
Log:
https://jira.jboss.org/browse/JBIDE-2704
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java 2010-09-06
17:53:42 UTC (rev 24748)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -60,7 +60,7 @@
*/
public TextProposal[] getProposals(KbQuery query, IProject project) {
String[] parents = query.getParentTags();
- if(parents.length>2) {
+ if(parents.length>1) {
CDICoreNature nature = CDICorePlugin.getCDI(project, false);
if(nature!=null) {
ICDIProject cdiProject = nature.getDelegate();
@@ -82,7 +82,7 @@
private TextProposal[] getAlternativeBeans(KbQuery query, ICDIProject cdiProject) {
List<TextProposal> proposals = new ArrayList<TextProposal>();
- String value = query.getValue().trim();
+ String value = removeLeadingWhitespace(query.getValue());
IBean[] alternatives = cdiProject.getAlternatives();
for (IBean bean : alternatives) {
if(bean instanceof IClassBean) {
@@ -95,7 +95,7 @@
private TextProposal[] getAlternativeStereotypes(KbQuery query, ICDIProject cdiProject)
{
List<TextProposal> proposals = new ArrayList<TextProposal>();
- String value = query.getValue().trim();
+ String value = removeLeadingWhitespace(query.getValue());
IStereotype[] alternatives = cdiProject.getStereotypes();
for (IStereotype stereotype : alternatives) {
if(stereotype.isAlternative()) {
@@ -108,7 +108,7 @@
private TextProposal[] getDecorators(KbQuery query, ICDIProject cdiProject) {
List<TextProposal> proposals = new ArrayList<TextProposal>();
- String value = query.getValue().trim();
+ String value = removeLeadingWhitespace(query.getValue());
IDecorator[] decorators = cdiProject.getDecorators();
for (IDecorator bean : decorators) {
IType type = bean.getBeanClass();
@@ -119,7 +119,7 @@
private TextProposal[] getInterceptors(KbQuery query, ICDIProject cdiProject) {
List<TextProposal> proposals = new ArrayList<TextProposal>();
- String value = query.getValue().trim();
+ String value = removeLeadingWhitespace(query.getValue());
IInterceptor[] interceptors = cdiProject.getInterceptors();
for (IInterceptor bean : interceptors) {
IType type = bean.getBeanClass();
@@ -128,6 +128,16 @@
return proposals.toArray(new TextProposal[0]);
}
+ private String removeLeadingWhitespace(String value) {
+ int len = value.length();
+ int st = 0;
+ char[] val = value.toCharArray();
+ while ((st < len) && (val[st] <= ' ')) {
+ st++;
+ }
+ return (st > 0) ? value.substring(st) : value;
+ }
+
private void addMatchedType(IType type, String value, List<TextProposal>
proposals) {
String fullTypeName = type.getFullyQualifiedName();
if(fullTypeName.startsWith(value)) {
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClass.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClass.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClass.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative
+public class AlternativeClass {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClass.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClassBean.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClassBean.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClassBean.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative
+public class AlternativeClassBean {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeClassBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,22 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Alternative;
+import javax.enterprise.inject.Stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Stereotype
+@Alternative
+@Target({ TYPE, METHOD, FIELD })
+@Retention(RUNTIME)
+@Documented
+public @interface AlternativeStereotype {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype2.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype2.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype2.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,22 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Alternative;
+import javax.enterprise.inject.Stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Stereotype
+@Alternative
+@Target({ TYPE, METHOD, FIELD })
+@Retention(RUNTIME)
+@Documented
+public @interface AlternativeStereotype2 {
+
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/AlternativeStereotype2.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/BeanClass.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/BeanClass.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/BeanClass.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+public class BeanClass {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/BeanClass.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/ClassBean.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/ClassBean.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/ClassBean.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+public class ClassBean {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/ClassBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/InterceptorBean.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/InterceptorBean.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/InterceptorBean.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,20 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import org.jboss.jsr299.tck.tests.decorators.interceptor.FooBinding;
+
+@FooBinding
+@Interceptor
+public class InterceptorBean {
+
+ public InterceptorBean() {
+ }
+
+ @AroundInvoke
+ public Object manage(InvocationContext ic) throws Exception {
+ return null;
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/InterceptorBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/LoggerDecorator.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/LoggerDecorator.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/LoggerDecorator.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,25 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.enterprise.inject.Any;
+import javax.inject.Inject;
+
+import org.jboss.jsr299.tck.tests.decorators.definition.Logger;
+
+@Decorator
+public abstract class LoggerDecorator implements Logger {
+
+ @Inject
+ @Delegate
+ @Any
+ private Logger logger;
+
+ public LoggerDecorator() {
+ }
+
+ @Override
+ public void log(String string) {
+ logger.log(string);
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/LoggerDecorator.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/NotAlternativeStereotype.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/NotAlternativeStereotype.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/NotAlternativeStereotype.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -0,0 +1,20 @@
+package org.jboss.jsr299.tck.tests.jbt.ca;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Stereotype
+@Target({ TYPE, METHOD, FIELD })
+@Retention(RUNTIME)
+@Documented
+public @interface NotAlternativeStereotype {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/ca/NotAlternativeStereotype.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/ca/BeansXmlCATest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/ca/BeansXmlCATest.java 2010-09-06
17:53:42 UTC (rev 24748)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/ca/BeansXmlCATest.java 2010-09-06
19:15:50 UTC (rev 24749)
@@ -11,8 +11,19 @@
package org.jboss.tools.cdi.core.test.ca;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IDecorator;
+import org.jboss.tools.cdi.core.IInterceptor;
+import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.core.test.tck.TCKTest;
import org.jboss.tools.cdi.internal.core.ca.BeansXmlProcessor;
+import org.jboss.tools.common.text.TextProposal;
import org.jboss.tools.jst.web.kb.KbQuery;
/**
@@ -20,23 +31,141 @@
*/
public class BeansXmlCATest extends TCKTest {
- public void testAlternativeBeans() {
+ public void testEmptyList() {
KbQuery query = new KbQuery();
query.setParentTags(new String[]{"alternatives", "class"});
+ query.setValue(" test ");
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ assertEquals("The list of proposals should be empty.", 0, proposals.length);
+ }
+
+ public void testAllAlternativeBeans() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"alternatives", "class"});
query.setValue("");
- BeansXmlProcessor.getInstance().getProposals(query, tckProject);
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ Map<String, TextProposal> map = generateMap(proposals);
+ IBean[] alternatives = cdiProject.getAlternatives();
+ List<IClassBean> alternativeClassBeans = new ArrayList<IClassBean>();
+ for (IBean bean : alternatives) {
+ if(bean instanceof IClassBean) {
+ if(map.get(bean.getBeanClass().getFullyQualifiedName())==null) {
+ fail("The list of proposals doesn't contain following alternative bean:
" + bean.getBeanClass().getFullyQualifiedName());
+ }
+ alternativeClassBeans.add((IClassBean)bean);
+ }
+ }
+ assertEquals("The number of proposals doesn't equel to the number of
alternative beans.", alternativeClassBeans.size(), proposals.length);
}
- public void testAlternativeStereotypes() {
-
+ public void testSomeAlternativeBeans() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"alternatives", "class"});
+ query.setValue("org.jboss.jsr299.tck.tests.jbt.ca.");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ String[] types = new
String[]{"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeClass",
"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeClassBean"};
+ assertEqualTypes(proposals, types);
}
- public void testDecorators() {
-
+ public void testAllAlternativeStereotypes() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"alternatives", "stereotype"});
+ query.setValue(" ");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ Map<String, TextProposal> map = generateMap(proposals);
+ IStereotype[] alternatives = cdiProject.getStereotypes();
+ List<IStereotype> alternativeStereotype = new ArrayList<IStereotype>();
+ for (IStereotype stereotype : alternatives) {
+ if(stereotype.isAlternative()) {
+ if(map.get(stereotype.getSourceType().getFullyQualifiedName())==null) {
+ fail("The list of proposals doesn't contain following alternative
stereotype: " + stereotype.getSourceType().getFullyQualifiedName());
+ }
+ alternativeStereotype.add(stereotype);
+ }
+ }
+ assertEquals("The number of proposals doesn't equel to the number of
alternative stereotypes.", alternativeStereotype.size(), proposals.length);
}
- public void testInterceptors() {
-
+ public void testSomeAlternativeStereotypes() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"alternatives", "stereotype"});
+ query.setValue(" org.jboss.jsr299.tck.tests.jbt.ca.");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ String[] types = new
String[]{"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeStereotype",
"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeStereotype2"};
+ assertEqualTypes(proposals, types);
}
+
+ public void testAllDecorators() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"decorators", "class"});
+ query.setValue("");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ Map<String, TextProposal> map = generateMap(proposals);
+ IDecorator[] decorators = cdiProject.getDecorators();
+ for (IDecorator decorator : decorators) {
+ if(map.get(decorator.getBeanClass().getFullyQualifiedName())==null) {
+ fail("The list of proposals doesn't contain following decorator: " +
decorator.getBeanClass().getFullyQualifiedName());
+ }
+ }
+ assertEquals("The number of proposals doesn't equel to the number of
decorators.", decorators.length, proposals.length);
+ }
+
+ public void testSomeDecorators() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"decorators", "class"});
+ query.setValue("org.jboss.jsr299.tck.tests.jbt.ca.");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ String[] types = new
String[]{"org.jboss.jsr299.tck.tests.jbt.ca.LoggerDecorator"};
+ assertEqualTypes(proposals, types);
+ }
+
+ public void testAllInterceptors() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"interceptors", "class"});
+ query.setValue("");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ Map<String, TextProposal> map = generateMap(proposals);
+ IInterceptor[] interceptors = cdiProject.getInterceptors();
+ for (IInterceptor interceptor : interceptors) {
+ if(map.get(interceptor.getBeanClass().getFullyQualifiedName())==null) {
+ fail("The list of proposals doesn't contain following interceptor: " +
interceptor.getBeanClass().getFullyQualifiedName());
+ }
+ }
+ assertEquals("The number of proposals doesn't equel to the number of
interceptors.", interceptors.length, proposals.length);
+ }
+
+ public void testSomeInterceptors() {
+ KbQuery query = new KbQuery();
+ query.setParentTags(new String[]{"interceptors", "class"});
+ query.setValue("org.jboss.jsr299.tck.tests.jbt.ca.");
+
+ TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query,
tckProject);
+ String[] types = new
String[]{"org.jboss.jsr299.tck.tests.jbt.ca.InterceptorBean"};
+ assertEqualTypes(proposals, types);
+ }
+
+ private Map<String, TextProposal> generateMap(TextProposal[] proposals) {
+ Map<String, TextProposal> map = new HashMap<String, TextProposal>();
+ for (TextProposal proposal : proposals) {
+ map.put(proposal.getReplacementString(), proposal);
+ }
+ return map;
+ }
+
+ private void assertEqualTypes(TextProposal[] proposals, String[] types) {
+ assertEquals("The number of proposals doesn't equel to the number of
types.", types.length, proposals.length);
+ Map<String, TextProposal> map = generateMap(proposals);
+ for (String type : types) {
+ if(map.get(type)==null) {
+ fail("Can't find " + type + " proposal.");
+ }
+ }
+ }
}
\ No newline at end of file