[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