[jbosstools-commits] JBoss Tools SVN: r30627 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core: src/org/jboss/tools/cdi/seam/solder/core and 1 other directory.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Fri Apr 15 21:12:25 EDT 2011
Author: scabanovich
Date: 2011-04-15 21:12:25 -0400 (Fri, 15 Apr 2011)
New Revision: 30627
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderCoreExtension.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java
Log:
JBIDE-8716
https://issues.jboss.org/browse/JBIDE-8716
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml 2011-04-16 01:11:58 UTC (rev 30626)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml 2011-04-16 01:12:25 UTC (rev 30627)
@@ -7,6 +7,7 @@
class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderCoreExtension"
runtime="org.jboss.seam.solder.core.CoreExtension">
</cdiextension>
+
<cdiextension
class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderLoggerExtension"
runtime="org.jboss.seam.solder.logging.TypedMessageLoggerExtension">
@@ -16,5 +17,10 @@
class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderServiceHandlerExtension"
runtime="org.jboss.seam.solder.serviceHandler.ServiceHandlerExtension">
</cdiextension>
+
+ <cdiextension
+ class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderDefaultBeanExtension"
+ runtime="org.jboss.seam.solder.bean.defaultbean.DefaultBeanExtension">
+ </cdiextension>
</extension>
</plugin>
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java 2011-04-16 01:11:58 UTC (rev 30626)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java 2011-04-16 01:12:25 UTC (rev 30627)
@@ -14,4 +14,5 @@
public String SERVICE_HANDLER_TYPE_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.serviceHandler.ServiceHandlerType";
public String SERVICE_ANNOTATION_KIND = "serviceAnnotation";
+ public String DEFAULT_BEAN_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.bean.defaultbean.DefaultBean";
}
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderCoreExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderCoreExtension.java 2011-04-16 01:11:58 UTC (rev 30626)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderCoreExtension.java 2011-04-16 01:12:25 UTC (rev 30627)
@@ -1,6 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.seam.solder.core;
-
import java.beans.Introspector;
import java.util.ArrayList;
import java.util.HashSet;
@@ -10,12 +19,9 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.SourceRange;
-import org.eclipse.jdt.internal.core.MemberValuePair;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IAnnotated;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
-import org.jboss.tools.cdi.core.IDefinitionContext;
import org.jboss.tools.cdi.core.IRootDefinitionContext;
import org.jboss.tools.cdi.core.extension.ICDIExtension;
import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
@@ -25,7 +31,6 @@
import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.AbstractTypeDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
-import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
import org.jboss.tools.cdi.internal.core.impl.definition.FieldDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.PackageDefinition;
@@ -35,6 +40,18 @@
import org.jboss.tools.common.util.BeanUtil;
import org.jboss.tools.common.util.EclipseJavaUtil;
+/**
+ * Implements support for org.jboss.seam.solder.core.CoreExtension
+ *
+ * For @Veto and @Requires marks bean definition as vetoed.
+ *
+ * For @FullyQualified and @Named on packages, adds fake @Named to bean
+ *
+ * For @Exact marks parameter or field type as overridden.
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
public class CDISeamSolderCoreExtension implements ICDIExtension, IProcessAnnotatedTypeFeature {
public Object getAdapter(Class adapter) {
@@ -148,10 +165,9 @@
}
if(beanName != null) {
- IMemberValuePair[] pairs = new IMemberValuePair[]{new MemberValuePair("value", beanName, IMemberValuePair.K_STRING)};
AnnotationDefinition n = context.getAnnotation(CDIConstants.NAMED_QUALIFIER_TYPE_NAME);
if(n != null) {
- AnnotationLiteral l = new AnnotationLiteral(d.getResource(), "", new SourceRange(0, 0), pairs, n.getType());
+ AnnotationLiteral l = new AnnotationLiteral(d.getResource(), 0, 0, beanName, IMemberValuePair.K_STRING, n.getType());
if(named != null) d.removeAnnotation(named);
d.addAnnotation(l, context);
}
Added: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java 2011-04-16 01:12:25 UTC (rev 30627)
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.seam.solder.core;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IAnnotationDeclaration;
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IJavaAnnotation;
+import org.jboss.tools.cdi.core.IProducer;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.extension.ICDIExtension;
+import org.jboss.tools.cdi.core.extension.feature.IAmbiguousBeanResolverFeature;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
+import org.jboss.tools.cdi.internal.core.impl.AnnotationLiteral;
+import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.FieldDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.util.EclipseJavaUtil;
+
+/**
+ * Implements support for org.jboss.seam.solder.bean.defaultbean.DefaultBeanExtension.
+ *
+ * In processing annotated type adds to each bean definition, which is a default bean,
+ * faked @Typed annotation with type set by @DefaultBean.
+ *
+ * In resolving ambiguous beans removes default beans out of the result set if it
+ * contains at least one non-default bean;
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class CDISeamSolderDefaultBeanExtension implements ICDIExtension, IProcessAnnotatedTypeFeature, IAmbiguousBeanResolverFeature {
+
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+ public void processAnnotatedType(TypeDefinition typeDefinition, IRootDefinitionContext context) {
+ boolean defaultBean = typeDefinition.isAnnotationPresent(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME);
+ IJavaAnnotation beanTyped = null;
+ if(defaultBean) {
+ beanTyped = createFakeTypedAnnotation(typeDefinition, context);
+ if(beanTyped != null) {
+ typeDefinition.addAnnotation(beanTyped, context);
+ }
+ }
+ List<MethodDefinition> ms = typeDefinition.getMethods();
+ for (MethodDefinition m: ms) {
+ if(m.isAnnotationPresent(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME)) {
+ if(defaultBean || m.isAnnotationPresent(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME)) {
+ IJavaAnnotation methodTyped = createFakeTypedAnnotation(m, context);
+ if(methodTyped != null) {
+ m.addAnnotation(methodTyped, context);
+ }
+ }
+ }
+ }
+ List<FieldDefinition> fs = typeDefinition.getFields();
+ for (FieldDefinition f: fs) {
+ if(f.isAnnotationPresent(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME)) {
+ if(defaultBean || f.isAnnotationPresent(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME)) {
+ IJavaAnnotation fieldTyped = createFakeTypedAnnotation(f, context);
+ if(fieldTyped != null) {
+ f.addAnnotation(fieldTyped, context);
+ }
+ }
+ }
+ }
+ }
+
+ IJavaAnnotation createFakeTypedAnnotation(AbstractMemberDefinition def, IRootDefinitionContext context) {
+ IAnnotationDeclaration a = def.getAnnotation(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME);
+ if(a == null) return null;
+ Object n = a.getMemberValue(null);
+ String defaultType = null;
+ if(n != null && n.toString().length() > 0) {
+ IJavaProject jp = EclipseResourceUtil.getJavaProject(context.getProject().getProject());
+ IType typedAnnotation = null;
+ try {
+ typedAnnotation = EclipseJavaUtil.findType(jp, CDIConstants.TYPED_ANNOTATION_TYPE_NAME);
+ } catch (JavaModelException e) {
+ CDICorePlugin.getDefault().logError(e);
+ return null;
+ }
+ defaultType = n.toString();
+ return new AnnotationLiteral(def.getResource(), a.getStartPosition(), a.getLength(), defaultType, IMemberValuePair.K_CLASS, typedAnnotation);
+ }
+ return null;
+
+ }
+
+ public Set<IBean> getResolvedBeans(Set<IBean> result) {
+ Set<IBean> defaultBeans = new HashSet<IBean>();
+ for (IBean b: result) {
+ if(b.getAnnotation(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME) != null) {
+ defaultBeans.add(b);
+ } else if(b instanceof IProducer) {
+ IProducer producer = (IProducer)b;
+ IClassBean parent = producer.getClassBean();
+ if(parent != null && parent.getAnnotation(CDISeamSolderConstants.DEFAULT_BEAN_ANNOTATION_TYPE_NAME) != null) {
+ defaultBeans.add(b);
+ }
+ }
+ }
+ if(!defaultBeans.isEmpty() && defaultBeans.size() < result.size()) {
+ result.removeAll(defaultBeans);
+ }
+ return result;
+ }
+
+}
Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java 2011-04-16 01:11:58 UTC (rev 30626)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java 2011-04-16 01:12:25 UTC (rev 30627)
@@ -35,7 +35,14 @@
import org.jboss.tools.common.model.XModelObject;
/**
+ * Implements support for org.jboss.seam.solder.serviceHandler.ServiceHandlerExtension.
*
+ * During building definitions
+ * 1) participates in recognizing annotations type annotated with @ServiceHandlerType and stores them;
+ * 2) builds and stores definitions annotated with those annotation types.
+ *
+ * During building beans creates beans of stored definitions.
+ *
* @author Viacheslav Kabanovich
*
*/
More information about the jbosstools-commits
mailing list